Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to LeadIQ

Scalekit connector
Open markdown

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

Tools
14
What they doRead · write · destructive
11 · 3 · 011 read3 write0 destructive
Users sign in with

What you can do

  • Search contacts: look up verified work emails, direct dials, and mobile numbers by LinkedIn URL, email, or name
  • Preview before consuming credits: check whether LeadIQ has a work email or phone for a person without spending credits
  • Enrich companies: fetch firmographics including industry, employee count, and location by domain or name
  • Advanced prospecting: filter contacts by title, seniority, industry, company size, and location; get results flat or grouped by company
  • Manage prospect lists: create lists, add contacts, and retrieve saved prospects (requires Prospector plan)
  • Monitor quota: check API credit usage, plan limits, and subscription status before making credit-consuming calls

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    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. Create the LeadIQ connection

    In AgentKit > Connections, create a LeadIQ connection. The name you give it is the connection_name your code passes. See Configure connections.

    Console steps with screenshots

    Register your LeadIQ API key with Scalekit so it stores it securely and injects it into every request. LeadIQ uses API key authentication.

    1. Get your LeadIQ API key

      • Sign in to LeadIQ and go to Settings → API Keys.
      • Copy the Secret API key value, or click Generate new API key to create one dedicated to this integration.

      LeadIQ Settings API Keys page showing Secret API key and Secret Base64 API key fields

    2. Create a connection in Scalekit

      • In Scalekit dashboard, go to AgentKit → Connections → Create Connection. Find LeadIQ and click Create.
      • Note the Connection name — you will use this as connection_name in your code (e.g., leadiq).
      • Click Save.
    3. Add a connected account

      Connected accounts link a specific user identifier in your system to their LeadIQ API key. Add one in the dashboard to test. In production, each user adds their own through the authorization link: they enter their credentials on the page it opens.

      In the dashboard, to test

      • Open the connection you created and click the Connected Accounts tab → Add account.
      • Fill in:
        • Your User’s ID — a unique identifier for this user in your system (e.g., user_123)
        • API Key — the LeadIQ API key from step 1
      • Click Create Account.

      From your backend, if your app already has the credentials

      For example, when users enter them on a settings page in your app:

      import { Scalekit, ConnectorStatus } from '@scalekit-sdk/node';
      const scalekit = new Scalekit(
      process.env.SCALEKIT_ENVIRONMENT_URL,
      process.env.SCALEKIT_CLIENT_ID,
      process.env.SCALEKIT_CLIENT_SECRET,
      );
      // Never hard-code credentials — read from secure storage or user input
      const leadiqApiKey = getUserLeadIQApiKey(); // retrieve from your secure store
      const authorizationDetails = {
      details: {
      case: 'staticAuth',
      value: {
      details: {
      username: leadiqApiKey,
      },
      },
      },
      };
      let { connectedAccount } = await scalekit.actions.upsertConnectedAccount({
      connectionName: 'leadiq',
      identifier: 'user_123',
      authorizationDetails,
      });
      // Make sure the account is ACTIVE before the first tool call.
      if (connectedAccount?.status !== ConnectorStatus.ACTIVE) {
      ({ connectedAccount } = await scalekit.actions.upsertConnectedAccount({
      connectionName: 'leadiq',
      identifier: 'user_123',
      authorizationDetails,
      }));
      }

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • leadiq_get_accountRetrieve the current LeadIQ account details including active plans, product subscriptions, billing status, and credit usage (available and used).Read-only

    Get Account

    Retrieve the current LeadIQ account details including active plans, product subscriptions, billing status, and credit usage (available and used). Use this to check remaining search credits before making enrichment calls.

    Inputs

    This tool takes no inputs.

  • leadiq_get_companyRetrieve a single company record by its LeadIQ company ID, returning full firmographic details: industry, employee count, headquarters location, funding, and known email domains.Read-only

    Get Company

    Retrieve a single company record by its LeadIQ company ID, returning full firmographic details: industry, employee count, headquarters location, funding, and known email domains. Use Search Company, or the company objects embedded in People Search / Advanced Search results, to find a company ID first.

    Inputs

    idstringrequired
    LeadIQ company ID to retrieve
  • leadiq_get_listRetrieve a specific prospect list by ID, including its contacts with name, title, company, email, and LinkedIn URL.Read-only

    Get Prospect List

    Retrieve a specific prospect list by ID, including its contacts with name, title, company, email, and LinkedIn URL. Use Get Prospect Lists first to find the list ID.

    Inputs

    idstringrequired
    ID of the prospect list to retrieve
    prospects_cursorstring
    Pagination cursor from a previous response to get the next batch of prospects
    prospects_limitinteger
    Maximum number of prospects to return from the list (default 25)
  • leadiq_get_listsRetrieve all prospect lists in the LeadIQ account.Read-only

    Get Prospect Lists

    Retrieve all prospect lists in the LeadIQ account. Returns list metadata including name, status, and timestamps. Use the returned list IDs with Get Prospect List to fetch contacts.

    Inputs

    cursorstring
    Pagination cursor from a previous response's nextCursor field
    limitinteger
    Maximum number of lists to return per page
  • leadiq_get_prospectRetrieve a single prospect record by ID, including full contact details: emails, phones, LinkedIn, title, company, and location.Read-only

    Get Prospect

    Retrieve a single prospect record by ID, including full contact details: emails, phones, LinkedIn, title, company, and location.

    Inputs

    idstringrequired
    ID of the prospect to retrieve
  • leadiq_get_usageRetrieve API credit usage for the current billing period — plan credit counts, usage caps, trial usage, and subscription status.Read-only

    Get Usage

    Retrieve API credit usage for the current billing period — plan credit counts, usage caps, trial usage, and subscription status. Use this to monitor quota before making credit-consuming calls.

    Inputs

    This tool takes no inputs.

Workflows

Check credit quota before searching

Always check available credits before calling tools that consume them (leadiq_search_people, leadiq_flat_advanced_search, leadiq_grouped_advanced_search).

const usage = await actions.executeTool({
toolName: 'leadiq_get_usage',
connector: 'leadiq',
identifier: 'user_123',
toolInput: {},
});
console.log(usage.data?.usage);
Preview contact availability before consuming credits

Use leadiq_search_people_preview to check whether LeadIQ has a work email or phone for a person before calling leadiq_search_people. The preview call does not consume credits.

const preview = await actions.executeTool({
toolName: 'leadiq_search_people_preview',
connector: 'leadiq',
identifier: 'user_123',
toolInput: {
linkedin_url: 'https://www.linkedin.com/in/janedoe',
},
});
if (preview.data?.data?.searchPeoplePreview?.hasEmail) {
// Safe to call leadiq_search_people — credits will be consumed
}
Look up a contact by LinkedIn URL, email, or name
// By LinkedIn URL (most precise)
const contact = await actions.executeTool({
toolName: 'leadiq_search_people',
connector: 'leadiq',
identifier: 'user_123',
toolInput: {
linkedin_url: 'https://www.linkedin.com/in/janedoe',
limit: 1,
},
});
// By name + company
const byName = await actions.executeTool({
toolName: 'leadiq_search_people',
connector: 'leadiq',
identifier: 'user_123',
toolInput: {
first_name: 'Jane',
last_name: 'Doe',
company_name: 'Acme Corp',
limit: 5,
},
});
Enrich a company by domain or name
const company = await actions.executeTool({
toolName: 'leadiq_search_company',
connector: 'leadiq',
identifier: 'user_123',
toolInput: {
domain: 'acme.com',
},
});
console.log(company.data?.data?.searchCompany);
Advanced people search with industry and seniority filters

Pass filter objects as Python dicts or JavaScript objects — not JSON-encoded strings.

const results = await actions.executeTool({
toolName: 'leadiq_flat_advanced_search',
connector: 'leadiq',
identifier: 'user_123',
toolInput: {
company_filter: {
industries: ['Software Development'],
sizes: [{ min: 50, max: 500 }],
},
contact_filter: {
seniorities: ['VP', 'Director'],
},
limit: 10,
},
});
const people = results.data?.data?.flatAdvancedSearch?.people ?? [];
Advanced search grouped by company (account-based prospecting)

Returns results organized by company, each with a list of matching contacts. Useful for account-based outreach.

const grouped = await actions.executeTool({
toolName: 'leadiq_grouped_advanced_search',
connector: 'leadiq',
identifier: 'user_123',
toolInput: {
company_filter: {
industries: ['Financial Services'],
sizes: [{ min: 200, max: 5000 }],
},
contact_filter: {
seniorities: ['Executive', 'VP'],
},
limit: 5, // number of companies
limit_per_company: 3, // contacts per company
},
});
const companies = grouped.data?.data?.groupedAdvancedSearch?.companies ?? [];
Report incorrect contact data

Help improve LeadIQ data quality by reporting bounced emails or wrong phone numbers.

await actions.executeTool({
toolName: 'leadiq_submit_person_feedback',
connector: 'leadiq',
identifier: 'user_123',
toolInput: {
value: 'jane.doe@acme.com',
status: 'Invalid',
type: 'WorkEmail',
invalid_reason: 'EmailBounceCode550',
},
});