> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Ocean.io

The Ocean.io connector lets your AI agent act in each user's Ocean.io account. Each user connects their own Ocean.io API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 32 tools.

**Authentication:** API Key
**Categories:** CRM & Sales, Marketing
**Tools:** 32: 24 read, 7 write, 1 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=OCEAN)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Ocean.io connection

   In **AgentKit > Connections**, create an Ocean.io connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'ocean'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Ocean.io:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'ocean_enrich_company',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "ocean"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Ocean.io:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="ocean_enrich_company",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Ocean.io credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'ocean_attribute_segmentation_domains',
  toolInput: {
    domains: [],
    segmentation_id: 1,
  },
  connector: 'ocean',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="ocean_attribute_segmentation_domains",
    tool_input={
        "domains": [],
        "segmentation_id": 1,
    },
    connection_name="ocean",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `ocean_attribute_segmentation_domains`

Attribute Domains to Segments · Read-only

Assign each input domain to the closest segment of a segmentation with a 0-1 match score.
Returns one result per input domain in input order, the number requested and the number attributed.
Use this tool to place new accounts into segments. The segmentation must have status SUCCESSFUL first.
Requires a segmentationId from ocean_create_segmentation.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domains` (`array`, required): Domains to attribute (max 1000).
- `segmentation_id` (`integer`, required): Numeric id of the segmentation, returned by Create Segmentation.

Example input: `{"domains":[],"segmentation_id":1}`

### `ocean_autocomplete_companies`

Autocomplete Companies · Read-only

Suggest companies from the start of a name or domain.
Returns matching companies with domain, name and logo.
Use this tool to turn a typed company name into a domain for lookalike searches or lookups.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `name` (`string`, required): Beginning of the name or the domain of a company
- `countryFilters` (`array`, optional): List of countries to filter for the autocompletion
- `excludeDomains` (`array`, optional): List of domains to exclude from the results
- `forLookalikeSearch` (`boolean`, optional): When `false`, returns all matching companies without domain validation or status filters. WARNING: Do not set this parameter to `false` if the autocomplete results will be used as input for a lookalike search.

Example input: `{"name":"<name>"}`

### `ocean_autocomplete_job_titles`

Autocomplete Job Titles · Read-only

Suggest job titles from the start of a title.
Returns an array of matching job titles.
Use this tool to find job title values for people filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Beginning of the job title
- `limit` (`integer`, optional): Number of job titles to return. Default is 5 if not specified, maximum is 15.

Example input: `{"query":"<query>"}`

### `ocean_autocomplete_keywords`

Autocomplete Keywords · Read-only

Suggest keywords from the start of a keyword.
Returns an array of matching keywords.
Use this tool to find valid keyword values for company filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Beginning of the keyword
- `limit` (`integer`, optional): Number of keywords to return. Default is 5 if not specified, maximum is 15.

Example input: `{"query":"<query>"}`

### `ocean_autocomplete_locations`

Autocomplete Locations · Read-only

Suggest locations from the start of a place name.
Returns matching locations with name, country code, filter code and parent location.
Use this tool to find valid location values for company or people filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Beginning of the location
- `limit` (`integer`, optional): Number of locations to return. Default is 5 if not specified, maximum is 15.
- `locationType` (`string`, optional): Whether to suggest locations for company searches or people searches. One of: `companies`, `people`.

Example input: `{"query":"<query>"}`

### `ocean_autocomplete_skills`

Autocomplete Skills · Read-only

Suggest skills from the start of a skill name.
Returns an array of matching skills.
Use this tool to find skill values for people filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Beginning of the skill name
- `limit` (`integer`, optional): Number of skills to return. Default is 5 if not specified, maximum is 15.

Example input: `{"query":"<query>"}`

### `ocean_enrich_company`

Enrich Company · Read-only

Match one company against Ocean.io's database and return its enriched profile.
Returns the company's domain, name, size, industries, technologies, locations, contact details, and credits used.
Use this tool for a single company described by a domain, name or other known details. Use ocean_lookup_companies for many domains at once. Consumes Ocean.io credits.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company` (`object`, optional): Known details about the company to match, as a JSON object. Provide at least a domain or a name; more fields (city, countryCode, linkedin, phone) improve matching. Example: {"domain": "stripe.com"}.
- `fields` (`array`, optional): Company fields to return. If omitted, Ocean.io returns its default field set.
- `people` (`array`, optional): Known details about people at the company to help match it, as a list of JSON objects with fields such as name, jobTitle, email and linkedin. Example: [{"name": "Jane Doe", "jobTitle": "CEO"}].

Example input: `{}`

### `ocean_enrich_person`

Enrich Person · Read-only

Match one person against Ocean.io's database and return their enriched profile.
Returns the person's name, job title, LinkedIn URL, location, seniorities, departments, experience, and credits used.
Use this tool for a single contact described by a name, LinkedIn URL, email or Ocean id. Use ocean_lookup_people for many LinkedIn handles at once. Consumes Ocean.io credits.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `person` (`object`, required): Known details about the person to match, as a JSON object. Provide an Ocean id, a LinkedIn URL, an email, or a name together with company details. Example: {"linkedin": "https://www.linkedin.com/in/jane-doe"}.
- `company` (`object`, optional): Known details about the person's employer to help match, as a JSON object with fields such as domain or name. Example: {"domain": "stripe.com"}.
- `revealEmails` (`object`, optional): Set to include emails in the result as a JSON object with includeEmails true. One email credit is charged per verified email. An optional webhookUrl receives emails that need background verification. Example: {"includeEmails": true}.
- `revealPhones` (`object`, optional): Set to include phone numbers in the result as a JSON object with includePhones true. One phone credit is charged per verified phone. An optional webhookUrl receives phones that need background verification. Example: {"includePhones": true}.

Example input: `{"person":{"linkedin":"https://www.linkedin.com/in/jane-doe"}}`

### `ocean_get_company_posts`

Get Company Posts · Read-only

Get posts from a company's LinkedIn page.
Returns a page of posts, the page number, total pages and results, and credits used. An empty result is not charged.
Use this tool for company social activity. Use ocean_get_person_posts for a person's posts. Provide linkedinNumID or linkedinID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `linkedinID` (`string`, optional): LinkedIn vanity ID (e.g. "google"). Slower and less preferred than linkedinNumID.
- `linkedinNumID` (`string`, optional): LinkedIn numeric company ID (e.g. "35625249"). The preferred, faster identifier.
- `page` (`integer`, optional): Page number (1-indexed)
- `perPage` (`integer`, optional): Number of items per page

Example input: `{}`

### `ocean_get_credit_balance`

Get Credit Balance · Read-only

Get the remaining Ocean.io credit balances for the account.
Returns general, email, phone and preview credits (one-time and recurring) plus the daily request limit left and seconds until it resets.
Use this tool before large searches or lookups to confirm enough credits remain.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `ocean_get_data_fields`

Get Data Fields · Read-only

List the values Ocean.io accepts in search filters.
Returns industries and industry categories, LinkedIn industries, technologies, regions per country, seniorities, departments and sub-departments. Uses no credits.
Use this tool before building filters for ocean_search_companies or ocean_search_people.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `ocean_get_exclusion_list`

Get Exclusion List · Read-only

Retrieve one exclusion list by id.
Returns its type, name, creation time, item count, and up to the first 20,000 items.
Use this tool to inspect a list's contents. Use ocean_list_exclusion_lists to find ids.
Requires a listId from ocean_list_exclusion_lists.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `list_id` (`string`, required): Id of the exclusion list, returned by List Exclusion Lists or Create Exclusion List.

Example input: `{"list_id":"<list_id>"}`

### `ocean_get_person_posts`

Get Person Posts · Read-only

Get posts from a person's LinkedIn profile.
Returns a page of posts, a hasMoreResults flag, a paginationToken for the next page, and credits used. An empty result is not charged.
Use this tool for a person's social activity. Use ocean_get_company_posts for a company page. Provide linkedinEntityID or linkedinID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `linkedinEntityID` (`string`, optional): LinkedIn entity ID for the person. The preferred, faster identifier.
- `linkedinID` (`string`, optional): LinkedIn ID for the person. Slower and less preferred than linkedinEntityID.
- `paginationToken` (`string`, optional): Token for pagination, required to return results beyond the first page.
- `perPage` (`integer`, optional): Number of items per page

Example input: `{}`

### `ocean_get_post_comments`

Get Post Comments · Read-only

Get comments on a LinkedIn post, optionally with replies.
Returns a page of comments, total results and pages, a paginationToken, and credits used. An empty result is not charged.
Use this tool to read discussion on a post. Use ocean_get_post_reactions or ocean_get_post_reshares for other engagement.
Requires a postUrn from ocean_get_company_posts or ocean_get_person_posts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `postUrn` (`string`, required): LinkedIn post URN
- `numReplies` (`integer`, optional): Number of replies to include per comment
- `page` (`integer`, optional): Page number (1-indexed). Increment together with paginationToken.
- `paginationToken` (`string`, optional): Omit on page 1. For each next page, increment page and pass the returned token with other parameters unchanged.
- `perPage` (`integer`, optional): Number of items per page
- `sortOrder` (`string`, optional): `CHRONOLOGICAL` returns the complete top-level comment page; `RELEVANCE` may return only LinkedIn's curated subset. One of: `CHRONOLOGICAL`, `RELEVANCE`.

Example input: `{"postUrn":"<postUrn>"}`

### `ocean_get_post_reactions`

Get Post Reactions · Read-only

Get reactions to a LinkedIn post, optionally filtered by reaction type.
Returns a page of reactions, total results and pages, a paginationToken, and credits used. An empty result is not charged.
Use this tool to see who reacted. Use ocean_get_post_comments or ocean_get_post_reshares for other engagement.
Requires a postUrn from ocean_get_company_posts or ocean_get_person_posts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `postUrn` (`string`, required): LinkedIn post URN
- `page` (`integer`, optional): Page number (1-indexed). Increment together with paginationToken.
- `paginationToken` (`string`, optional): Omit on page 1. For each next page, increment page and pass the returned token with other parameters unchanged.
- `perPage` (`integer`, optional): Number of items per page
- `reactionType` (`string`, optional): Type of reaction to filter, if not supplied returns all reactions. One of: `LIKE`, `EMPATHY`, `INTEREST`, `PRAISE`, `APPRECIATION`.

Example input: `{"postUrn":"<postUrn>"}`

### `ocean_get_post_reshares`

Get Post Reshares · Read-only

Get reshares of a LinkedIn post.
Returns a page of reshares, total results and pages, a paginationToken, and credits used. An empty result is not charged.
Use this tool to see who shared a post. Use ocean_get_post_reactions or ocean_get_post_comments for other engagement.
Requires a postUrn from ocean_get_company_posts or ocean_get_person_posts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `postUrn` (`string`, required): LinkedIn post URN
- `page` (`integer`, optional): Page number (1-indexed)
- `paginationToken` (`string`, optional): Token required for pagination, returned on the first request.
- `perPage` (`integer`, optional): Number of items per page

Example input: `{"postUrn":"<postUrn>"}`

### `ocean_get_segmentation`

Get Segmentation · Read-only

Retrieve a segmentation by id.
Returns its status (IN_PROGRESS, SUCCESSFUL or FAILED), the resulting segments, traits and CRM metrics once successful, and the total addressable market.
Use this tool to poll a segmentation created with ocean_create_segmentation.
Requires a segmentationId from ocean_create_segmentation.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `segmentation_id` (`integer`, required): Numeric id of the segmentation, returned by Create Segmentation.

Example input: `{"segmentation_id":1}`

### `ocean_list_exclusion_lists`

List Exclusion Lists · Read-only

List all exclusion lists in the organization.
Returns an array of list summaries.
Use this tool to find a listId. Use ocean_get_exclusion_list to read one list's items.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `ocean_lookup_companies`

Lookup Companies · Read-only

Look up and enrich up to 1,000 companies by domain in one request.
Returns the matched companies, how many domains were requested and found, domain redirect mappings, and credits used.
Use this tool when you have a list of domains. Use ocean_enrich_company when you only have a name or partial details. Consumes Ocean.io credits.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domains` (`array`, required): Company domains to look up, up to 1,000. Redirected domains are resolved automatically.
- `fields` (`array`, optional): Company fields to return. If omitted, Ocean.io returns its default field set.

Example input: `{"domains":[]}`

### `ocean_lookup_people`

Lookup People · Read-only

Look up and enrich up to 1,000 people by LinkedIn handle or Ocean id in one request.
Returns the matched people, how many identifiers were requested and found, and credits used.
Use this tool when you have LinkedIn handles or Ocean ids. Use ocean_enrich_person when you only have a name, email or partial details. Consumes Ocean.io credits.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `linkedinHandles` (`array`, optional): LinkedIn profile handles to look up, for example jane-doe from linkedin.com/in/jane-doe. Combined with oceanIds the limit is 1,000.
- `oceanIds` (`array`, optional): Ocean.io person ids to look up, taken from search results. Combined with linkedinHandles the limit is 1,000.

Example input: `{}`

### `ocean_preview_search_companies`

Preview Search Companies · Read-only

Preview a company search with the same filters as search_companies, returning a small sample.
Returns the total hit count, a sample of 5 to 50 companies, and credits used.
Use this tool to size an audience cheaply before running ocean_search_companies. Available to enterprise API customers only.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `companiesFilters` (`object`, optional): Company filters as a JSON object. Common filters are lookalikeDomains (up to 10 seed domains), includeDomains, excludeDomains, companySizes (ranges such as 11-50 or 51-200), revenues (ranges such as 10-50M), industries, industryCategories, linkedinIndustries, keywords (lists named anyOf, allOf and noneOf), technologies, primaryLocations, yearFounded and employeeCountOcean (each with from and to), fundingRound, headcountGrowth, jobPostings, buyingSignals and excludeListId. Valid industry, technology and region values come from Get Data Fields. Example: {"lookalikeDomains": ["stripe.com"], "companySizes": ["51-200", "201-500"]}.
- `peopleFilters` (`object`, optional): People filters as a JSON object. Common filters are seniorities, departments (an object with a departments list and an optional mode), jobTitleKeywords (lists named anyOf, allOf and noneOf), countries (ISO alpha-2 codes), skills, names, includeLinkedinHandles, includePeopleIds, excludeLinkedinHandles, excludePeopleIds, excludeListId, lookalikeLinkedinHandles, updatedWithinMonths and fieldsExist. Valid seniority and department values come from Get Data Fields. Example: {"seniorities": ["C-Level", "VP"], "jobTitleKeywords": {"anyOf": ["marketing"]}}.
- `size` (`integer`, optional): Number of sample companies to return, from 5 to 50.

Example input: `{}`

### `ocean_preview_search_people`

Preview Search People · Read-only

Preview a people search with company information, returning a small sample.
Returns the total number of available people, a sample of up to 50 people, and credits used.
Use this tool to size a contact audience cheaply before running ocean_search_people. Available to enterprise API customers only.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `companiesFilters` (`object`, optional): Company filters as a JSON object. Common filters are lookalikeDomains (up to 10 seed domains), includeDomains, excludeDomains, companySizes (ranges such as 11-50 or 51-200), revenues (ranges such as 10-50M), industries, industryCategories, linkedinIndustries, keywords (lists named anyOf, allOf and noneOf), technologies, primaryLocations, yearFounded and employeeCountOcean (each with from and to), fundingRound, headcountGrowth, jobPostings, buyingSignals and excludeListId. Valid industry, technology and region values come from Get Data Fields. Example: {"lookalikeDomains": ["stripe.com"], "companySizes": ["51-200", "201-500"]}.
- `fields` (`array`, optional): Person fields to return in the sample. If omitted, Ocean.io returns its default field set.
- `jobTitleThreshold` (`number`, optional): Threshold for job title similarity. The value must be between 0 and 1. Default is 0.8
- `peopleFilters` (`object`, optional): People filters as a JSON object. Common filters are seniorities, departments (an object with a departments list and an optional mode), jobTitleKeywords (lists named anyOf, allOf and noneOf), countries (ISO alpha-2 codes), skills, names, includeLinkedinHandles, includePeopleIds, excludeLinkedinHandles, excludePeopleIds, excludeListId, lookalikeLinkedinHandles, updatedWithinMonths and fieldsExist. Valid seniority and department values come from Get Data Fields. Example: {"seniorities": ["C-Level", "VP"], "jobTitleKeywords": {"anyOf": ["marketing"]}}.
- `peoplePerCompany` (`integer`, optional): Number of people to return per company. If you want to return all people from a company, don't set this value.
- `searchAfter` (`string`, optional): Use `searchAfter` returned by the previous request to get the next page.
- `size` (`integer`, optional): Number of sample people to return, from 1 to 50.

Example input: `{}`

### `ocean_search_companies`

Search Companies · Read-only

Search Ocean.io's company database with filters or lookalike seed domains.
Returns matching companies, the total count, credits used, and a searchAfter cursor for the next page.
Use this tool to find new target accounts. Use ocean_lookup_companies when the exact domains are already known. Consumes Ocean.io credits.
Call ocean_get_data_fields first to get valid industry, technology and region values.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `companiesFilters` (`object`, optional): Company filters as a JSON object. Common filters are lookalikeDomains (up to 10 seed domains), includeDomains, excludeDomains, companySizes (ranges such as 11-50 or 51-200), revenues (ranges such as 10-50M), industries, industryCategories, linkedinIndustries, keywords (lists named anyOf, allOf and noneOf), technologies, primaryLocations, yearFounded and employeeCountOcean (each with from and to), fundingRound, headcountGrowth, jobPostings, buyingSignals and excludeListId. Valid industry, technology and region values come from Get Data Fields. Example: {"lookalikeDomains": ["stripe.com"], "companySizes": ["51-200", "201-500"]}.
- `fields` (`array`, optional): Company fields to return, such as domain, name, industries and companySize. If omitted, Ocean.io returns its default field set; requesting fewer fields gives faster responses.
- `peopleFilters` (`object`, optional): People filters as a JSON object. Common filters are seniorities, departments (an object with a departments list and an optional mode), jobTitleKeywords (lists named anyOf, allOf and noneOf), countries (ISO alpha-2 codes), skills, names, includeLinkedinHandles, includePeopleIds, excludeLinkedinHandles, excludePeopleIds, excludeListId, lookalikeLinkedinHandles, updatedWithinMonths and fieldsExist. Valid seniority and department values come from Get Data Fields. Example: {"seniorities": ["C-Level", "VP"], "jobTitleKeywords": {"anyOf": ["marketing"]}}.
- `searchAfter` (`string`, optional): Use `searchAfter` returned by the previous request to get the next page
- `size` (`integer`, optional): Number of companies to return, from 1 to 10,000. Use searchAfter to page beyond 10,000 results.

Example input: `{}`

### `ocean_search_people`

Search People · Read-only

Search Ocean.io's people database with filters, lookalike LinkedIn handles, or specific person ids.
Returns matching people with profile and company details, the total count, credits used, and a searchAfter cursor for the next page.
Use this tool to find contacts at target companies. Use ocean_lookup_people when LinkedIn handles or Ocean ids are already known. Consumes Ocean.io credits.
Call ocean_get_data_fields first to get valid seniority and department values.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `companiesFilters` (`object`, optional): Company filters as a JSON object. Common filters are lookalikeDomains (up to 10 seed domains), includeDomains, excludeDomains, companySizes (ranges such as 11-50 or 51-200), revenues (ranges such as 10-50M), industries, industryCategories, linkedinIndustries, keywords (lists named anyOf, allOf and noneOf), technologies, primaryLocations, yearFounded and employeeCountOcean (each with from and to), fundingRound, headcountGrowth, jobPostings, buyingSignals and excludeListId. Valid industry, technology and region values come from Get Data Fields. Example: {"lookalikeDomains": ["stripe.com"], "companySizes": ["51-200", "201-500"]}.
- `fields` (`array`, optional): Person fields to return, such as name, jobTitle, linkedinUrl and seniorities. Company details use the company. prefix. If omitted, Ocean.io returns its default field set.
- `jobTitleThreshold` (`number`, optional): Job title similarity threshold between 0 and 1. Higher values match titles more strictly. Ocean.io uses 0.8 when unset.
- `peopleFilters` (`object`, optional): People filters as a JSON object. Common filters are seniorities, departments (an object with a departments list and an optional mode), jobTitleKeywords (lists named anyOf, allOf and noneOf), countries (ISO alpha-2 codes), skills, names, includeLinkedinHandles, includePeopleIds, excludeLinkedinHandles, excludePeopleIds, excludeListId, lookalikeLinkedinHandles, updatedWithinMonths and fieldsExist. Valid seniority and department values come from Get Data Fields. Example: {"seniorities": ["C-Level", "VP"], "jobTitleKeywords": {"anyOf": ["marketing"]}}.
- `peoplePerCompany` (`integer`, optional): Maximum number of people to return per company. Leave unset to return every matching person at each company.
- `searchAfter` (`string`, optional): Use `searchAfter` returned by the previous request to get the next page.
- `size` (`integer`, optional): Number of people to return, from 1 to 10,000.

Example input: `{}`

### `ocean_add_exclusion_list_items`

Add Exclusion List Items · Write

Add company domains or LinkedIn handles to an exclusion list, creating the list when no listId is given.
Returns the listId of the updated or new list.
Use this tool to keep known companies or people out of search results. Use ocean_create_exclusion_list to create an empty list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `items` (`array`, required): Company domains or LinkedIn handles to add, up to 10,000 per request. Items are company domains in a companies list and LinkedIn handles in a people list. A URL is reduced to its domain or LinkedIn handle (`https://www.linkedin.com/in/john-doe/` is stored as `john-doe`).
- `type` (`string`, required): Whether the list holds people (LinkedIn handles) or companies (domains). One of: `people`, `companies`.
- `listId` (`string`, optional): List to add items to. A new list is created when omitted.

Example input: `{"items":[],"type":"people"}`

### `ocean_add_marked_domains`

Add Marked Domains to Segmentation · Write

Add domains to the positive (good fit) or negative (poor fit) list of an existing segmentation.
Returns a status string.
Use this tool to steer future segmentation results toward good-fit companies and away from poor-fit ones.
Requires a segmentationId from ocean_create_segmentation.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `domains` (`array`, required): Domains to add to the positive or negative list.
- `segmentation_id` (`integer`, required): Numeric id of the segmentation, returned by Create Segmentation.
- `type` (`string`, required): Whether these domains are a good fit (positive) or a poor fit (negative) for the segmentation. One of: `positive`, `negative`.

Example input: `{"domains":[],"segmentation_id":1,"type":"positive"}`

### `ocean_create_exclusion_list`

Create Exclusion List · Write

Create an empty exclusion list for people (LinkedIn handles) or companies (domains).
Returns the new listId.
Use this tool to start a list you will fill with ocean_add_exclusion_list_items. Use ocean_add_exclusion_list_items alone to create and fill a list in one call.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `type` (`string`, required): Whether the list holds people (LinkedIn handles) or companies (domains). One of: `people`, `companies`.
- `name` (`string`, optional): Optional display name for the list.

Example input: `{"type":"people"}`

### `ocean_create_segmentation`

Create Segmentation · Write

Create a segmentation that groups a set of company domains into segments.
Returns the new segmentationId. Processing is asynchronous.
Use this tool to cluster your customers or target accounts, then poll ocean_get_segmentation until its status is SUCCESSFUL.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `domains` (`array`, required): Company domains to segment. Provide a representative set of the companies you want to group, typically your customers or best-fit accounts.
- `leadScoringFeatures` (`array`, optional): Company attributes to consider when grouping and scoring companies (for example `industries`, `technologies`, `company_size`). Omit to use the default feature set.
- `negativeDomains` (`array`, optional): Companies that are a poor fit. The segmentation leans away from similar companies.
- `numberOfSegmentsMode` (`integer`, optional): Bias toward fewer or more segments. Omit to let the service choose the number that best fits the data.
- `positiveDomains` (`array`, optional): Companies that are a good fit. The segmentation leans toward similar companies.

Example input: `{"domains":[]}`

### `ocean_remove_exclusion_list_items`

Remove Exclusion List Items · Write

Remove company domains or LinkedIn handles from an exclusion list.
Returns the API's confirmation response.
Use this tool to take specific entries off a list. Use ocean_delete_exclusion_list to delete the whole list.
Requires a listId from ocean_list_exclusion_lists.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `items` (`array`, required): Company domains or LinkedIn handles to remove, up to 10,000 per request. Items are company domains in a companies list and LinkedIn handles in a people list. A URL is reduced to its domain or LinkedIn handle (`https://www.linkedin.com/in/john-doe/` is stored as `john-doe`).
- `list_id` (`string`, required): Id of the exclusion list, returned by List Exclusion Lists or Create Exclusion List.
- `type` (`string`, required): Whether the list holds people (LinkedIn handles) or companies (domains). One of: `people`, `companies`.

Example input: `{"items":[],"list_id":"<list_id>","type":"people"}`

### `ocean_rename_exclusion_list`

Rename Exclusion List · Write

Rename an exclusion list.
Returns the API's confirmation response.
Use this tool to change a list's display name. Use ocean_add_exclusion_list_items to change its contents.
Requires a listId from ocean_list_exclusion_lists.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `list_id` (`string`, required): Id of the exclusion list, returned by List Exclusion Lists or Create Exclusion List.
- `name` (`string`, required): New display name for the list.

Example input: `{"list_id":"<list_id>","name":"<name>"}`

### `ocean_warmup_companies`

Warm Up Companies · Write

Check which domains Ocean.io already has and start data gathering for the missing ones.
Returns the domains already present, the domains triggered for gathering, ignored invalid domains, and reasons for any missing data. Uses no credits.
Use this tool before a lookalike search when seed domains may be new to Ocean.io.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `domains` (`array`, required): Company domains to check and add to Ocean.io's database if missing.

Example input: `{"domains":[]}`

### `ocean_delete_exclusion_list`

Delete Exclusion List · Destructive

Delete an exclusion list and all of its items.
Returns the API's confirmation response.
Use this tool only when the whole list is no longer needed. Use ocean_remove_exclusion_list_items to remove some items.
Requires a listId from ocean_list_exclusion_lists.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `list_id` (`string`, required): Id of the exclusion list, returned by List Exclusion Lists or Create Exclusion List.

Example input: `{"list_id":"<list_id>"}`

## Related

Other CRM & Sales connectors ([all 97](/agentkit/connectors/?category=crm-sales)):

- [Insightly](/agentkit/connectors/insightly/): Scalekit connector, API key, 108 tools
- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Salesforce](/agentkit/connectors/salesforce/): Scalekit connector, OAuth, 74 tools


---

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