> **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 Prospeo

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

**Authentication:** API Key
**Categories:** CRM & Sales
**Tools:** 8: 4 read, 4 write, 0 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=PROSPEO)

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

   In **AgentKit > Connections**, create a Prospeo 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 = 'prospeo'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Prospeo:', 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: 'prospeo_get_account_information',
     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 = "prospeo"
   identifier = "user_123"

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

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

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Prospeo 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: 'prospeo_get_account_information',
  toolInput: {},
  connector: 'prospeo',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="prospeo_get_account_information",
    tool_input={},
    connection_name="prospeo",
    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.

### `prospeo_get_account_information`

Get Account Information · Read-only

Get the Prospeo account's current plan, remaining credits and quota renewal date.
Returns a response object with current_plan, remaining_credits, used_credits, current_team_members, next_quota_renewal_days and next_quota_renewal_date.
Use to check credit balance before running enrichment or search. Free and does not use credits.

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

Inputs: none.

Example input: `{}`

### `prospeo_search_company`

Search Companies · Read-only

Search Prospeo's database for companies that match industry, headcount, funding, technology and location filters, 25 per page.
Returns results (a company record per item) and pagination with current_page, total_page and total_count.
Use to build account lists. Use prospeo_enrich_company for one known company and prospeo_search_person to find people at companies.
Costs 1 credit per page that returns at least one company; repeating the same paid page within 30 days is free. Get exact location, industry and technology values from prospeo_search_suggestions.

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

Inputs:

- `filters` (`object`, required): Filter object that selects companies. Keys include company_industry, company_headcount_range, company_location_search, company_technology, company_funding (stage, funding_date, last_funding, total_funding), company_email_provider, company_naics, company_sics, and company (with names or websites, up to 500 combined). Most take include and/or exclude lists. A search must contain at least one positive (non-exclude) filter. Person-level filters and company.company_oids are not accepted here. Example: {"company_industry":{"include":["Software Development"]},"company_headcount_range":["51-100","101-200"],"company_funding":{"stage":["Series A","Series B"]}}.
- `page` (`integer`, optional): Results page to return, 25 results per page. Defaults to 1; maximum 1000.

Example input: `{"filters":{}}`

### `prospeo_search_person`

Search People · Read-only

Search Prospeo's database for people that match job, seniority, location and company filters, 25 per page.
Returns results (person and current company per item, with email and mobile present but not revealed) and pagination with current_page, total_page and total_count.
Use to build prospect lists. Pass each person_id to prospeo_enrich_person or prospeo_bulk_enrich_person to reveal email and mobile. Use prospeo_search_company to search companies instead.
Costs 1 credit per page that returns at least one person; repeating the same paid page within 30 days is free. Get exact location, job title, industry and technology values from prospeo_search_suggestions.

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

Inputs:

- `filters` (`object`, required): Filter object that selects people. Keys are filter names such as person_job_title, person_seniority, person_department, person_location_search, person_year_of_experience, person_contact_details, company_industry, company_headcount_range, company_location_search, company_technology, company_funding, and company (with names or websites). Most take include and/or exclude lists, ranges take min and max, and job titles accept match_mode (CONTAINS, EXACT, SIMILAR). A search must contain at least one positive (non-exclude) filter. Location filters need exact values from prospeo_search_suggestions. Example: {"person_job_title":{"include":["Head of Sales"],"match_mode":"CONTAINS"},"person_seniority":{"include":["Director"]},"company_headcount_range":["51-100","101-200"]}.
- `page` (`integer`, optional): Results page to return, 25 results per page. Defaults to 1; maximum 1000.

Example input: `{"filters":{}}`

### `prospeo_search_suggestions`

Get Search Suggestions · Read-only

Look up the exact location, job title, technology, industry, NAICS or SIC values that Prospeo search filters accept.
Returns a suggestions list for the chosen search_field (for example location_suggestions with name and type, or naics_suggestions with code and label); all other suggestion lists are null.
Use before prospeo_search_person or prospeo_search_company, because location and enum filters reject free-text values. Free and does not use credits.
Provide exactly one search_field with a query of at least 2 characters; pass returned location names back exactly as returned.

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

Inputs:

- `query` (`string`, required): Text to look up, at least 2 characters. For naics_search and sic_search a digits-only query matches the code prefix and text matches the label.
- `search_field` (`string`, required): Which kind of value to look up. location_search, job_title_search, technology_search, industry_search, naics_search and sic_search are the core lookups; the company_* options return canonical values for the matching company filter. One of: `location_search`, `job_title_search`, `technology_search`, `industry_search`, `naics_search`, `sic_search`, `company_operating_languages_search`, `company_google_discovery_search`, `company_key_customers_search`, `company_integrations_search`, `company_products_services_products_search`, `company_products_services_services_search`, `company_icp_titles_search`, `company_icp_industries_search`, `company_icp_geographic_markets_search`, `company_icp_other_departments_search`, `company_awards_search`, `company_awards_compliance_search`, `company_headcount_by_location_search`, `company_funding_investors_search`, `company_funding_accelerator_search`, `company_website_traffic_countries_search`.

Example input: `{"query":"<query>","search_field":"location_search"}`

### `prospeo_bulk_enrich_company`

Bulk Enrich Company · Write

Enrich up to 50 companies in one request with firmographics, funding, technology and headcount.
Returns matched (identifier, company), not_matched identifiers, invalid_datapoints identifiers and total_cost in credits.
Use for batches. Use prospeo_enrich_company for a single company.
Each record needs an identifier plus at least one company field; records without one are returned in invalid_datapoints. Costs 1 credit per matched company.

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

Inputs:

- `data` (`array`, required): List of up to 50 companies to enrich. Each item needs an identifier plus at least one of company_website, company_linkedin_url, company_name or company_id. Example: [{"identifier":"1","company_website":"intercom.com"},{"identifier":"2","company_linkedin_url":"https://www.linkedin.com/company/deloitte"}].

Example input: `{"data":[{"identifier":"1","company_website":"intercom.com"},{"identifier":"2","company_linkedin_url":"https://www.linkedin.com/company/deloitte"}]}`

### `prospeo_bulk_enrich_person`

Bulk Enrich Person · Write

Enrich up to 50 people in one request with verified work emails, optional mobiles and current company details.
Returns matched (identifier, person, company), not_matched identifiers, invalid_datapoints identifiers and total_cost in credits.
Use for batches. Use prospeo_enrich_person for a single person.
Each record needs an identifier plus enough matching fields; records without them are returned in invalid_datapoints. The only_verified_email, enrich_mobile and only_verified_mobile flags apply to every record.

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

Inputs:

- `data` (`array`, required): List of up to 50 people to enrich. Each item needs an identifier plus enough fields to match: first_name + last_name + a company field, full_name + a company field, linkedin_url, email, or person_id. Example: [{"identifier":"1","full_name":"Eva Kiegler","company_website":"intercom.com"},{"identifier":"2","person_id":"66f745841665155f554e5f12"}].
- `enrich_mobile` (`boolean`, optional): When true, also reveal the person's mobile number if one exists. Costs 10 credits per record with a mobile instead of 1 credit for an email.
- `only_verified_email` (`boolean`, optional): When true, only return a record if it has a verified email; records without one come back as no match and are not charged.
- `only_verified_mobile` (`boolean`, optional): When true, only return records that have a mobile number. Setting this to true automatically turns on enrich_mobile.

Example input: `{"data":[{"identifier":"1","full_name":"Eva Kiegler","company_website":"intercom.com"},{"identifier":"2","person_id":"66f745841665155f554e5f12"}]}`

### `prospeo_enrich_company`

Enrich Company · Write

Enrich one company with firmographics, funding, technology, headcount, job postings and contact links.
Returns the matched company record (name, website, industry, employee range, revenue range, location, funding, technology), or an error with NO_MATCH when nothing matches.
Use for a single company. Use prospeo_bulk_enrich_company for up to 50 companies in one call.
Provide at least one of company_website, company_linkedin_url, company_name or company_id. Costs 1 credit per matched company.

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

Inputs:

- `company_id` (`string`, optional): company_id from a previously enriched or searched company record.
- `company_linkedin_url` (`string`, optional): Public LinkedIn URL of the company.
- `company_name` (`string`, optional): Name of the company. Many companies share names, so combine with another field.
- `company_website` (`string`, optional): Website or domain of the company. Preferred identifier.

Example input: `{}`

### `prospeo_enrich_person`

Enrich Person · Write

Enrich one person with verified work email, optional mobile number, job history and current company details.
Returns the matched person (identity, email, mobile, location, job history, skills) and their current company, or an error with NO_MATCH when nothing matches.
Use for a single person. Use prospeo_bulk_enrich_person for up to 50 people in one call, and prospeo_search_person to find people before enriching.
Provide one of: first_name + last_name + a company field, full_name + a company field, linkedin_url, email, or person_id. Costs 1 credit per email found and 10 credits when a mobile is found.

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

Inputs:

- `company_linkedin_url` (`string`, optional): Public LinkedIn URL of the person's company.
- `company_name` (`string`, optional): Name of the person's company. Many companies share names, so prefer company_website when you have it.
- `company_website` (`string`, optional): Website or domain of the person's company. Preferred over company_name for accuracy.
- `email` (`string`, optional): Work email address of the person. This alone is enough to match.
- `enrich_mobile` (`boolean`, optional): When true, also reveal the person's mobile number if one exists. Costs 10 credits per record with a mobile instead of 1 credit for an email.
- `first_name` (`string`, optional): First name of the person. Combine with last_name and a company field.
- `full_name` (`string`, optional): Full name of the person. Combine with a company field when first_name and last_name are not given.
- `last_name` (`string`, optional): Last name of the person. Combine with first_name and a company field.
- `linkedin_url` (`string`, optional): Public LinkedIn profile URL of the person. This alone is enough to match.
- `only_verified_email` (`boolean`, optional): When true, only return a record if it has a verified email; records without one come back as no match and are not charged.
- `only_verified_mobile` (`boolean`, optional): When true, only return records that have a mobile number. Setting this to true automatically turns on enrich_mobile.
- `person_id` (`string`, optional): Prospeo person_id returned by prospeo_search_person. This alone is enough to match.

Example input: `{}`

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