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

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

**Authentication:** API Key
**Categories:** Marketing, CRM & Sales
**Tools:** 72: 60 read, 10 write, 2 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=LEADMAGIC)

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

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

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

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

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

   ```bash
   python quickstart.py
   ```

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

**Python**

```python
result = actions.execute_tool(
    tool_name="leadmagic_detect_job_change",
    tool_input={
        "profile_url": "<profile_url>",
    },
    connection_name="leadmagic",
    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.

### `leadmagic_detect_job_change`

Detect Job Change · Read-only

Check whether a person still works at an expected company or has moved to a new one.
Returns a status (for example JOB_CHANGE_DETECTED or PROFILE_NOT_FOUND), job_change_detected, and the person's current company and title. Costs 3 credits per check; an unresolved profile costs nothing.
Use this to keep CRM contacts current. Use leadmagic_get_person_profile for the full profile.

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

Inputs:

- `profile_url` (`string`, required): B2B social profile URL or profile slug of the person, for example https://www.linkedin.com/in/alex-rivera or alex-rivera.
- `company_domain` (`string`, optional): Domain of the company you expect the person to work at, for example example.com. It adds match aliases for the company. Provide company_name or company_domain.
- `company_name` (`string`, optional): The company you expect the person to work at, for example Example Robotics. This value is authoritative for the match. Provide company_name or company_domain.

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

### `leadmagic_find_competitors`

Find Competitors · Read-only

Find the competitors of a company.
Returns competing companies with name, short description, founding year, headquarters, employee count and funding and operating metrics.
Use this for competitive landscape research. Use leadmagic_find_lookalike_companies to find similar companies as new prospects.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Provide at least one of company_domain, company_url or company_name.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Provide at least one of company_domain, company_url or company_name.
- `company_url` (`string`, optional): B2B company profile URL or slug, for example leadmagichq.

Example input: `{}`

### `leadmagic_find_email`

Find Work Email · Read-only

Find a person's verified work email from their name and company, or from their B2B profile URL.
Returns the email, its validation status, the person's name and the company domain and name. A miss returns a not-found message and costs no credits.
Use this to find a work email. Use leadmagic_find_profile_work_email when you only have a profile URL and want the profile-based match, leadmagic_find_personal_email for personal addresses, and leadmagic_validate_email to check an address you already have.

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

Inputs:

- `allow_domain_mismatch` (`boolean`, optional): When false (the API default), an email found on a domain unrelated to the requested one is returned as a free not-found with domain_mismatch true. Set true to return that email anyway, flagged domain_mismatch true and charged like any other find.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Provide this or domain unless you pass profile_url.
- `domain` (`string`, optional): Company website domain, for example leadmagic.io. Provide domain or company_name unless you pass profile_url. The domain gives the most accurate results.
- `first_name` (`string`, optional): The person's first name, for example Alex. A single initial is accepted when last_name is a full surname. Provide first_name and last_name, or full_name, unless you pass profile_url.
- `full_name` (`string`, optional): The person's full name, for example Alex Rivera, as an alternative to first_name plus last_name. An initial plus a surname (J Orjuela) is accepted.
- `last_name` (`string`, optional): The person's last name, for example Rivera. Use together with first_name.
- `profile_url` (`string`, optional): B2B social profile URL or profile slug of the person, for example https://www.linkedin.com/in/alex-rivera or alex-rivera. On its own it identifies the person and their company, so names and company are then optional.

Example input: `{}`

### `leadmagic_find_employees`

Find Employees · Read-only

List employees of a company.
Returns employees with their profile URLs, titles and locations. Costs 0.05 credits per employee returned, and nothing when none are found.
Use this to list people at one company. Use leadmagic_find_role for a single title, and leadmagic_search_people to filter by seniority, function or location.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Preferred over company_name. Provide this or company_name.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Provide this or company_domain.
- `limit` (`integer`, optional): Maximum number of employees to return. The API default is 10. Each employee returned costs 0.05 credits.

Example input: `{}`

### `leadmagic_find_jobs`

Find Jobs · Read-only

Find job postings by company, title, location, experience level, remote option and posting date.
Returns matching job postings with title, company, location, publish date, description, salary range, experience level and application URL, plus total_count and total_pages for paging with page and per_page.
Use this for simple job lookups by company or title. Use leadmagic_search_jobs for the richer search with occupation taxonomy, salary and tag filters. The ID filters take values from leadmagic_list_job_countries, leadmagic_list_job_regions, leadmagic_list_job_types, leadmagic_list_job_company_types and leadmagic_list_job_industries.

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

Inputs:

- `city_name` (`string`, optional): City name, for example Austin. Pair with country_id to tell apart cities that share a name.
- `company_industry_id` (`integer`, optional): Industry ID from leadmagic_list_job_industries, for example 7.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown.
- `company_type_id` (`integer`, optional): Company type ID from leadmagic_list_job_company_types, for example 1.
- `company_website` (`string`, optional): Company website domain, for example clay.com.
- `country_id` (`string`, optional): Country code, for example US or GB. Supported values come from leadmagic_list_job_countries.
- `experience_level` (`string`, optional): Required experience level: entry, mid, senior or executive. Leave empty for all levels. One of: `entry`, `mid`, `senior`, `executive`.
- `has_remote` (`boolean`, optional): true for remote listings only, false for non-remote listings only. Leave empty for both.
- `job_description` (`string`, optional): Keywords or phrases to match in the job description, for example Salesforce.
- `job_title` (`string`, optional): Job title to search for, for example RevOps Engineer.
- `job_type_id` (`integer`, optional): Job type ID from leadmagic_list_job_types, for example 1.
- `location` (`string`, optional): Job location as free text, for example United States.
- `max_employees` (`integer`, optional): Maximum number of employees at the hiring company, for example 10000.
- `min_employees` (`integer`, optional): Minimum number of employees at the hiring company, for example 51.
- `page` (`integer`, optional): Page number, starting at 1 (the API default).
- `per_page` (`integer`, optional): Results per page. The API default is 20 and the maximum is 50.
- `posted_after` (`string`, optional): Only jobs posted on or after this date, in YYYY-MM-DD format.
- `posted_before` (`string`, optional): Only jobs posted on or before this date, in YYYY-MM-DD format.
- `posted_within` (`integer`, optional): Only jobs posted within this many days, for example 30.
- `region_id` (`integer`, optional): Region ID from leadmagic_list_job_regions, for example 5.

Example input: `{}`

### `leadmagic_find_lookalike_companies`

Find Lookalike Companies · Read-only

Find companies similar to a seed company domain, name or free-text description.
Returns similar companies with full firmographics, ranked by similarity, and metadata.next_offset for paging. Costs 5 credits when at least one lookalike is returned, and nothing when none are.
Use this to expand a target account list. Use leadmagic_find_competitors for direct competitors, and leadmagic_search_companies to search by filters.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Provide a seed: company_domain, company_name or description.
- `company_filters` (`object`, optional): Filters applied to the lookalikes, a subset of the Search Companies filters: country_codes, employee_ranges, min_employees, max_employees, revenue_ranges, industries, sic_codes, naics_codes, founded_after, founded_before, has_funding, min_total_funding, max_total_funding, website_active, has_tech_stack, tech_stack and technographic lists such as crm_tech. Example: {"country_codes": ["US"], "employee_ranges": ["51 to 200", "201 to 500"]}.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Used as the seed when no domain is given.
- `description` (`string`, optional): Free-text description to use as the seed, for example AI-powered B2B email finder for sales teams.
- `limit` (`integer`, optional): Number of lookalikes per page. The API default is 25. Pages hold at most 100 companies; values from 101 to 2000 are reduced to 100.
- `offset` (`integer`, optional): Offset into the similarity ranking, for example 100 for the second page of 100. Use metadata.next_offset from the previous response. Maximum 2000.

Example input: `{}`

### `leadmagic_find_mobile`

Find Mobile Number · Read-only

Find a person's mobile phone number from their B2B profile URL, work email or personal email.
Returns the mobile number found, or a not-found message.
Use this for direct-dial numbers. People search tools only report whether a number is available; this tool returns the number itself.

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

Inputs:

- `personal_email` (`string`, optional): The person's personal email address, for example alex.rivera@gmail.com. Provide at least one of profile_url, work_email or personal_email.
- `profile_url` (`string`, optional): B2B social profile URL or profile slug of the person, for example https://www.linkedin.com/in/alex-rivera or alex-rivera. Provide at least one of profile_url, work_email or personal_email.
- `work_email` (`string`, optional): The person's work email address, for example alex.rivera@example.com. Provide at least one of profile_url, work_email or personal_email.

Example input: `{}`

### `leadmagic_find_personal_email`

Find Personal Email · Read-only

Find the personal (non-work) email addresses of a person from their B2B profile URL.
Returns the personal emails found for the profile, or a not-found message.
Use this for personal addresses. Use leadmagic_find_email or leadmagic_find_profile_work_email for work emails.

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

Inputs:

- `profile_url` (`string`, required): B2B social profile URL or profile slug of the person, for example https://www.linkedin.com/in/alex-rivera or alex-rivera.

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

### `leadmagic_find_profile_by_email`

Find Profile By Email · Read-only

Find a person's B2B profile URL from their work or personal email address.
Returns the matching profile URL, or a not-found message.
Use this to go from an email to a profile, then call leadmagic_get_person_profile with the URL for full details.

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

Inputs:

- `personal_email` (`string`, optional): The person's personal email address, for example alex.rivera@gmail.com. Provide this or work_email.
- `work_email` (`string`, optional): The person's work email address, for example alex.rivera@example.com. Provide this or personal_email.

Example input: `{}`

### `leadmagic_find_profile_work_email`

Find Work Email From Profile · Read-only

Find the work email of a person from their B2B profile URL.
Returns the work email found for the profile, or a not-found message.
Use this when a profile URL is all you have. Use leadmagic_find_email when you have the name and company, and leadmagic_find_personal_email for personal addresses.

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

Inputs:

- `profile_url` (`string`, required): B2B social profile URL or profile slug of the person, for example https://www.linkedin.com/in/alex-rivera or alex-rivera.

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

### `leadmagic_find_role`

Find Person By Role · Read-only

Find the person who holds a given job title at a company.
Returns the matching person's name, title and profile URL, or a not-found message.
Use this to find one decision maker, such as the CEO. Use leadmagic_find_employees to list many employees, and leadmagic_search_people for filtered searches across companies.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Provide this or company_name.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Provide this or company_domain.
- `job_title` (`string`, optional): The job title to look for at the company, for example CEO or VP of Sales.

Example input: `{}`

### `leadmagic_get_account_summary`

Get Account Summary · Read-only

Get lifetime API statistics for the account, optionally limited to a date range.
Returns total requests, credits consumed, products used, successful and failed requests, success rate, average response time, and first and last request times.
Use this for all-time totals. Use leadmagic_get_daily_metrics for per-day performance.

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

Inputs:

- `end_date` (`string`, optional): End of the date range, in YYYY-MM-DD format.
- `start_date` (`string`, optional): Start of the date range, in YYYY-MM-DD format.

Example input: `{}`

### `leadmagic_get_b2b_ad_details`

Get B2B Ad Details · Read-only

Get the details of one B2B social ad from its ad library URL, path or numeric ID.
Returns the advertiser's company details and the ad's headline, content, ad type, creative type, call to action, landing page, media URLs, targeting and impressions by country.
Use this after leadmagic_search_b2b_ads to inspect a single ad.

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

Inputs:

- `ad_url` (`string`, required): The ad library URL, the path /ad-library/detail/{id}, or the numeric ad ID, for example 1436673673.

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

### `leadmagic_get_batch`

Get Batch · Read-only

Get the status, progress, cost and metadata of one mixed-product batch.
Returns the batch's status, progress, cost and metadata.
Use this to track a batch from leadmagic_submit_batch.

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

Inputs:

- `batch_id` (`string`, required): ID of the batch, returned when it was submitted.

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

### `leadmagic_get_bulk_capabilities`

Get Bulk Capabilities · Read-only

Get the machine-readable manifest of bulk enrichment products and their inputs.
Returns the products bulk jobs support and the input fields each one expects.
Use this before leadmagic_submit_bulk_job to pick a product and shape the rows.

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

Inputs: none.

Example input: `{}`

### `leadmagic_get_bulk_job`

Get Bulk Job · Read-only

Get the status and progress of one bulk job.
Returns status, products, execution mode, row counts (total, processed, succeeded, failed, skipped), credits consumed, duration, timestamps, priority and callback settings.
Use this for full job detail. Use leadmagic_get_bulk_job_progress for a lighter poll, and leadmagic_get_bulk_job_results for the rows.

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

Inputs:

- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.

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

### `leadmagic_get_bulk_job_errors`

Get Bulk Job Errors · Read-only

Get the failed rows of a bulk job with their error details.
Returns failed rows and the reason each one failed.
Use this to diagnose failures, then leadmagic_restart_bulk_job with mode failed_only to retry them.

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

Inputs:

- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.
- `limit` (`integer`, optional): Rows per page, 1 to 1000. The API default is 200.
- `offset` (`integer`, optional): Zero-based row offset for paging. The API default is 0.
- `status` (`string`, optional): Only return failed rows with this status.

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

### `leadmagic_get_bulk_job_events`

Get Bulk Job Events · Read-only

Get the event log of a bulk job, newest first.
Returns the job's append-only event log, newest first.
Use this to audit what happened to a job. Use leadmagic_get_bulk_job for its current state.

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

Inputs:

- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.
- `limit` (`integer`, optional): Number of events to return, 1 to 2000. The API default is 200.

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

### `leadmagic_get_bulk_job_progress`

Get Bulk Job Progress · Read-only

Get a compact progress snapshot of a bulk job, suited to frequent polling.
Returns the job's status and progress counts.
Use this to poll a running job. Use leadmagic_get_bulk_job for full detail.

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

Inputs:

- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.
- `token` (`string`, optional): Optional signed progress token returned as token by leadmagic_submit_bulk_job.

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

### `leadmagic_get_bulk_job_results`

Get Bulk Job Results · Read-only

Get the row-level results of a bulk job as JSON, one page at a time.
Returns rows with row_index, status, the input (lm_input), the enrichment output (lm_output), credits consumed and any error message.
Use this to read enriched data. Use leadmagic_get_bulk_job_errors to see only failed rows.

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

Inputs:

- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.
- `limit` (`integer`, optional): Rows per page, 1 to 1000. The API default is 200.
- `offset` (`integer`, optional): Number of rows to skip, for paging. The API default is 0.
- `status` (`string`, optional): Only return rows with this status, for example succeeded or failed.

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

### `leadmagic_get_campaign_metrics`

Get Campaign Metrics · Read-only

Get aggregate usage and success metrics across the batches in a campaign.
Returns the campaign's combined usage, credits and success figures.
Use this to report on a campaign made of several batches.

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

Inputs:

- `campaign_id` (`string`, required): Campaign identifier used to group related batches.

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

### `leadmagic_get_company`

Get Company Profile · Read-only

Get the firmographic profile of one company from its domain, name or B2B company profile URL.
Returns company name, domain, industry, employee count, location, description, funding and social profile details.
Use this to enrich a single known company. Use leadmagic_search_companies to find companies by filters, and leadmagic_get_company_funding for full funding rounds.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Provide at least one of profile_url, company_domain or company_name.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Provide at least one of profile_url, company_domain or company_name.
- `profile_url` (`string`, optional): B2B company profile URL or slug, for example https://www.linkedin.com/company/leadmagichq or leadmagichq. Provide at least one of profile_url, company_domain or company_name.

Example input: `{}`

### `leadmagic_get_company_funding`

Get Company Funding · Read-only

Get the funding history of a company from its domain or name.
Returns financial info (revenue, total funding, last round), funding history with round, date, amount and investors, plus company basics, leadership, top competitors, acquisitions and news.
Use this for funding detail. Use leadmagic_get_company for the general company profile.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Provide this or company_name.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Provide this or company_domain.

Example input: `{}`

### `leadmagic_get_company_technographics`

Get Company Technographics · Read-only

Get the technology stack a company uses, from its domain.
Returns the detected technologies, each with name, description and categories, or a not-found message.
Use this for one company's stack. To find companies that use a technology, pass a technographic filter such as crm_tech to leadmagic_search_companies.

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

Inputs:

- `company_domain` (`string`, required): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company.

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

### `leadmagic_get_credit_balance`

Get Credit Balance · Read-only

Get the current credit balance of the workspace that owns the API key.
Returns the remaining credits.
Use this before large or bulk runs to check that enough credits are left. Use leadmagic_get_dashboard_overview for rate limits and usage alongside the balance, or leadmagic_get_credit_history for past consumption.

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

Inputs: none.

Example input: `{}`

### `leadmagic_get_credit_history`

Get Credit History · Read-only

Get credit consumption for the last N days.
Returns period totals (credits, requests, chargeable requests and rate) and a daily credit breakdown.
Use this to track spend over time. Use leadmagic_get_credit_balance for the current balance.

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

Inputs:

- `days` (`integer`, optional): Number of days to include, counting back from today, 1 to 90. The API default is 30.

Example input: `{}`

### `leadmagic_get_daily_metrics`

Get Daily Metrics · Read-only

Get per-day performance metrics for the last N days.
Returns, for each day, total, successful and failed requests, credits, p50, p95 and p99 latency, and error rate.
Use this to spot errors or slowdowns. Use leadmagic_get_usage_summary for volume totals.

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

Inputs:

- `days` (`integer`, optional): Number of days to include, counting back from today, 1 to 90. The API default is 30.

Example input: `{}`

### `leadmagic_get_dashboard_overview`

Get Dashboard Overview · Read-only

Get a real-time snapshot of the account.
Returns the user, current credits, per-minute and daily rate limits, concurrency, and usage for today, this week and this month.
Use this for a quick health check. Use leadmagic_get_credit_balance for just the balance.

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

Inputs: none.

Example input: `{}`

### `leadmagic_get_day_breakdown`

Get Day Breakdown · Read-only

Get the per-product usage breakdown for one day.
Returns the day's totals and, per product, requests, credits, share of credits and average credits per request.
Use this to drill into a single day. Use leadmagic_get_product_usage for a multi-day view.

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

Inputs:

- `date` (`string`, required): The day to break down, in YYYY-MM-DD format.

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

### `leadmagic_get_job_search_catalogs`

Get Job Search Catalogs · Read-only

Get the filter catalogs for job search: countries, regions, job types, industries, company types and seniority, plus dataset stats.
Returns each catalog with its IDs and labels.
Use this to find valid ID values for leadmagic_search_jobs filters such as job_type_ids, industry_ids and seniority.

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

Inputs: none.

Example input: `{}`

### `leadmagic_get_job_search_dataset_stats`

Get Job Search Dataset Stats · Read-only

Get dataset statistics for the job search index. Free.
Returns index totals and data freshness.
Use this to check how current job data is. Use leadmagic_get_search_stats for coverage across jobs, companies and people.

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

Inputs: none.

Example input: `{}`

### `leadmagic_get_person_profile`

Get Person Profile · Read-only

Get the full B2B profile of a person from their profile URL.
Returns name, professional title, bio, current company, location, tenure, work experience, education, certifications and honors.
Use this to enrich a known person. Use leadmagic_find_profile_by_email when you only have an email, and leadmagic_search_people to discover people by filters.

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

Inputs:

- `profile_url` (`string`, required): B2B social profile URL or profile slug of the person, for example https://www.linkedin.com/in/alex-rivera or alex-rivera.

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

### `leadmagic_get_product_usage`

Get Product Usage · Read-only

Get usage broken down by product (email finder, validation, mobile finder and so on) for the last N days.
Returns per-product requests, credits and success rates, plus daily data.
Use this to see which products spend credits. Use leadmagic_get_day_breakdown for one specific day.

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

Inputs:

- `days` (`integer`, optional): Number of days to include, counting back from today, 1 to 90. The API default is 30.

Example input: `{}`

### `leadmagic_get_search_stats`

Get Search Stats · Read-only

Get high-level coverage, capabilities and top dimensions for the Jobs, Company and People search indexes. Free.
Returns, per product, coverage counts, the top values per dimension and the supported filter capabilities.
Use this to learn what the search tools can filter on before calling leadmagic_search_people, leadmagic_search_companies or leadmagic_search_jobs.

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

Inputs:

- `limit` (`integer`, optional): Maximum top values per dimension, 1 to 25. The API default is 3.
- `products` (`array`, optional): Which search products to include: jobs, company and/or people. Leave empty for all three.
- `sections` (`array`, optional): Which sections to return: coverage, top and/or capabilities. Leave empty for all three.

Example input: `{}`

### `leadmagic_get_suppression_list`

Get Suppression List · Read-only

Get one suppression list and a page of its email hashes.
Returns the list ID, email count, creation time and SHA-256 email hashes.
Use this to inspect a list. Use leadmagic_list_suppression_lists to see all lists.

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

Inputs:

- `list_id` (`string`, required): Identifier of the suppression list, for example bounced-2026-q3.
- `limit` (`integer`, optional): Hashes per page, up to 1000. The API default is 200.
- `offset` (`integer`, optional): Number of hashes to skip, for paging. The API default is 0.

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

### `leadmagic_get_usage_summary`

Get Usage Summary · Read-only

Get API usage for the last N days.
Returns period totals (requests, chargeable requests, credits, average credits per request, products used) and a daily breakdown.
Use this for request volume. Use leadmagic_get_credit_history for credit consumption, and leadmagic_get_product_usage for per-product numbers.

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

Inputs:

- `days` (`integer`, optional): Number of days to include, counting back from today, 1 to 90. The API default is 30.

Example input: `{}`

### `leadmagic_list_batches`

List Batches · Read-only

List the organization's batches across all products, optionally filtered by product, status or client.
Returns the matching batches, newest first, with paging by limit and offset.
Use this to find a batch ID. Use leadmagic_get_batch for one batch's detail.

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

Inputs:

- `client_id` (`string`, optional): Only return batches for this client record.
- `limit` (`integer`, optional): Batches per page, 1 to 200. The API default is 50.
- `offset` (`integer`, optional): Number of batches to skip, for paging. The API default is 0.
- `product` (`string`, optional): Only return batches for this product, for example email_finder.
- `status` (`string`, optional): Only return batches with this status, for example completed.

Example input: `{}`

### `leadmagic_list_bulk_jobs`

List Bulk Jobs · Read-only

List the account's bulk jobs, newest first, optionally filtered by status or product.
Returns jobs with job_id, status, products, row counts (total, processed, succeeded, failed), credits consumed and timestamps.
Use this to find a job ID. Use leadmagic_get_bulk_job for one job's full detail.

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

Inputs:

- `limit` (`integer`, optional): Jobs per page, 1 to 200. The API default is 50.
- `offset` (`integer`, optional): Number of jobs to skip, for paging. The API default is 0.
- `product` (`string`, optional): Only return jobs for this enrichment product, for example email_finder.
- `status` (`string`, optional): Only return jobs with this status, for example completed or processing.

Example input: `{}`

### `leadmagic_list_job_company_types`

List Job Company Types · Read-only

List the company types available as Jobs Finder filters.
Returns an array of company types, each with id and name.
Use this to get a value for the company_type_id input of leadmagic_find_jobs.

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

Inputs: none.

Example input: `{}`

### `leadmagic_list_job_countries`

List Job Countries · Read-only

List the countries available as Jobs Finder filters.
Returns an array of countries, each with id and name.
Use this to get a value for the country_id input of leadmagic_find_jobs.

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

Inputs: none.

Example input: `{}`

### `leadmagic_list_job_industries`

List Job Industries · Read-only

List the industries available as Jobs Finder filters.
Returns an array of industries, each with id and name.
Use this to get a value for the company_industry_id input of leadmagic_find_jobs.

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

Inputs: none.

Example input: `{}`

### `leadmagic_list_job_regions`

List Job Regions · Read-only

List the regions available as Jobs Finder filters.
Returns an array of regions, each with id and name.
Use this to get a value for the region_id input of leadmagic_find_jobs.

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

Inputs: none.

Example input: `{}`

### `leadmagic_list_job_types`

List Job Types · Read-only

List the job types available as Jobs Finder filters.
Returns an array of job types, each with id and name.
Use this to get a value for the job_type_id input of leadmagic_find_jobs.

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

Inputs: none.

Example input: `{}`

### `leadmagic_list_suppression_lists`

List Suppression Lists · Read-only

List all suppression lists in the account.
Returns each list's ID, email count and creation time.
Use this to find a list ID. Use leadmagic_get_suppression_list for one list's hashes.

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

Inputs: none.

Example input: `{}`

### `leadmagic_lookup_job_search_companies`

Lookup Job Search Companies · Read-only

Autocomplete companies for job search by name or domain.
Returns matching company cards with their IDs.
Use this to find company IDs for the companies filter of leadmagic_search_jobs.

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

Inputs:

- `domain` (`string`, optional): Company domain to look up, for example stripe.com.
- `limit` (`integer`, optional): Maximum number of suggestions to return. The API default is 10.
- `q` (`string`, optional): Text to autocomplete companies from, for example stripe.

Example input: `{}`

### `leadmagic_lookup_job_search_locations`

Lookup Job Search Locations · Read-only

Autocomplete countries, regions, states and cities for exact job search location filters.
Returns matching locations with their IDs and type.
Use this to find values for the location filter of leadmagic_search_jobs.

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

Inputs:

- `limit` (`integer`, optional): Maximum number of suggestions to return. The API default is 10.
- `q` (`string`, optional): Text to autocomplete locations from, for example Austin.
- `type` (`string`, optional): Location type to search: country, region, state or city. One of: `country`, `region`, `state`, `city`.

Example input: `{}`

### `leadmagic_lookup_job_search_occupations`

Lookup Job Search Occupations · Read-only

Autocomplete occupation taxonomy entries with their level1, level2 and level3 IDs and labels.
Returns matching taxonomy entries.
Use this to find values for the occupation_taxonomy filter of leadmagic_search_jobs.

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

Inputs:

- `level` (`string`, optional): Taxonomy level to search: level1, level2 or level3. One of: `level1`, `level2`, `level3`.
- `limit` (`integer`, optional): Maximum number of suggestions to return. The API default is 10.
- `q` (`string`, optional): Text to autocomplete occupations from, for example devops.

Example input: `{}`

### `leadmagic_lookup_job_search_roles`

Lookup Job Search Roles · Read-only

Autocomplete roles for occupation-based job filtering.
Returns matching roles mapped to occupation taxonomy IDs.
Use this to turn a role name into occupation_taxonomy values for leadmagic_search_jobs.

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

Inputs:

- `limit` (`integer`, optional): Maximum number of suggestions to return. The API default is 10.
- `q` (`string`, optional): Text to autocomplete roles from, for example data engineer.

Example input: `{}`

### `leadmagic_lookup_job_search_tags`

Lookup Job Search Tags · Read-only

Autocomplete job search tags with their occupation taxonomy metadata.
Returns matching tags with IDs and taxonomy details.
Use this to find values for the tags filter of leadmagic_search_jobs.

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

Inputs:

- `limit` (`integer`, optional): Maximum number of suggestions to return. The API default is 10.
- `q` (`string`, optional): Text to autocomplete tags from, for example kubernetes.
- `tag_type` (`integer`, optional): Numeric tag type to restrict suggestions to, for example 1.

Example input: `{}`

### `leadmagic_lookup_job_search_titles`

Lookup Job Search Titles · Read-only

Autocomplete job titles with their occupation taxonomy metadata.
Returns matching titles with taxonomy details.
Use this to find values for the titles filter of leadmagic_search_jobs.

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

Inputs:

- `limit` (`integer`, optional): Maximum number of suggestions to return. The API default is 10.
- `q` (`string`, optional): Text to autocomplete titles from, for example software engineer.

Example input: `{}`

### `leadmagic_preview_batch_cost`

Preview Batch Cost · Read-only

Estimate the credit cost of a batch without reserving or spending credits. Free.
Returns total items, credits per item, total credits, estimated cost in USD, a per-product breakdown and whether the batch would exceed a credit budget.
Use this before leadmagic_submit_batch or leadmagic_submit_bulk_job.

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

Inputs:

- `items` (`array`, required): The items to enrich, up to 10000. Each item is an object with product (for example email_finder), input (the product's input fields), and optional client_id, client_name and metadata. Example: [{"product": "email_finder", "input": {"profile_url": "https://www.linkedin.com/in/jane-doe"}}].
- `budget_user_id` (`string`, optional): Member user ID whose credit budget to check the batch against.
- `client_id` (`string`, optional): Client record to associate with the batch.
- `client_name` (`string`, optional): Client name recorded with the batch.
- `metadata` (`object`, optional): Free-form metadata, for example {"campaign": "q4-outbound"}.

Example input: `{"items":[{"product":"email_finder","input":{"profile_url":"https://www.linkedin.com/in/jane-doe"}}]}`

### `leadmagic_resolve_job_search_filters`

Resolve Job Search Filters · Read-only

Resolve friendly job search filter values (company names, countries, tags, occupation labels and titles) into the canonical IDs leadmagic_search_jobs uses. Free; returns no job rows.
Returns the resolved IDs for each filter value.
Use this to check how a filter will be read before running leadmagic_search_jobs.

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

Inputs:

- `companies` (`object`, optional): Companies to resolve, with include and exclude lists of names or domains. Example: {"include": ["stripe.com"]}.
- `location` (`object`, optional): Locations to resolve, with countries, regions, states and cities lists. Example: {"countries": ["United States"]}.
- `occupation_taxonomy` (`object`, optional): Occupation labels to resolve, with level1, level2 and level3 lists. Example: {"level2": ["DevOps"]}.
- `tags` (`object`, optional): Tags to resolve, with include and exclude lists. Example: {"include": ["kubernetes"]}.
- `titles` (`object`, optional): Titles to resolve, with include and exclude lists. Example: {"include": ["Software Engineer"]}.

Example input: `{}`

### `leadmagic_search_b2b_ads`

Search B2B Ads · Read-only

Find the B2B social ads a company is running, from its domain or name.
Returns the advertiser's company details, ads_count, and ads with ad ID, headline, content, ad URL, ad type, call to action and landing page. Costs 1 base credit plus 1 credit per ad returned.
Use this to list a company's B2B ads, then leadmagic_get_b2b_ad_details for one ad. Use leadmagic_search_google_ads or leadmagic_search_meta_ads for other ad networks.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Provide this or company_name.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Provide this or company_domain.
- `limit` (`integer`, optional): Maximum number of ads to return, 1 to 100. Each ad returned costs 1 credit on top of the 1 base credit, so this also caps the per-ad spend. Leave empty to return every ad found.

Example input: `{}`

### `leadmagic_search_companies`

Search Companies · Read-only

Search companies by firmographic, geographic, funding and technographic filters, or look up one company directly.
Returns companies with full firmographics, plus count, has_more and next_cursor for paging. A direct lookup (company_domain, website, company_name or linkedin_url with no filters) returns found and one company.
Use this to build account lists. Use leadmagic_get_company for a simple single-company profile, and leadmagic_find_lookalike_companies to find companies similar to a seed.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. On its own this runs a direct one-company lookup.
- `company_filters` (`object`, optional): Filters for a broad search. Common keys: company_domains, company_names, keyword, industries, employee_ranges, min_employees, max_employees, revenue_ranges, founded_after, country_codes (HQ country), location_country_codes (presence), hq_cities, hq_states, hq_regions (EMEA, NORAM, APAC, LATAM), has_funding, min_total_funding, last_funding_types, website_active, tech_stack, and technographic lists such as crm_tech or marketing_automation_tech. Sort with sort_by (for example total_funding or linkedin_employee_count) and sort_order. Example: {"country_codes": ["US"], "crm_tech": ["Salesforce"], "has_funding": true}.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. On its own this runs a direct one-company lookup.
- `cursor` (`string`, optional): The next_cursor value from the previous page. Send it unchanged with the same filters and limit.
- `limit` (`integer`, optional): Number of companies per page, 1 to 50. The API default is 10.
- `linkedin_url` (`string`, optional): B2B company profile URL for a direct lookup, for example https://www.linkedin.com/company/acme/.
- `offset` (`integer`, optional): Legacy offset paging, deprecated in favor of cursor. Do not combine a non-zero offset with cursor.
- `query` (`string`, optional): Free-text company query, for example B2B data enrichment.
- `website` (`string`, optional): Company website URL or domain for a direct lookup, for example https://leadmagic.io.

Example input: `{}`

### `leadmagic_search_google_ads`

Search Google Ads · Read-only

Find the Google Ads a company is running, from its domain or name.
Returns ads_count and ads with advertiser name, creative ID, format, original URL and first and last seen dates. Costs 1 credit per ad returned.
Use this for Google ad research. Use leadmagic_search_meta_ads for Facebook and Instagram ads, and leadmagic_search_b2b_ads for B2B social ads.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Provide this or company_name.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Provide this or company_domain.
- `limit` (`integer`, optional): Maximum number of ads to return, 1 to 100. Each ad returned costs 1 credit, so this also caps the spend. Leave empty to return every ad found.

Example input: `{}`

### `leadmagic_search_jobs`

Search Jobs · Read-only

Search job postings with title, occupation taxonomy, company, location, tag, salary, seniority and date filters.
Returns matching jobs (signals) with company objects, a total counted per total_mode, the resolved filters, and pagination.next_cursor for the next page. Friendly filter values are resolved to IDs automatically unless autoResolve is false.
Use this for detailed hiring-signal research. Use leadmagic_find_jobs for a simple lookup, leadmagic_resolve_job_search_filters to preview how values resolve, and the leadmagic_lookup_job_search_* tools to find valid filter values.

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

Inputs:

- `auto_resolve` (`boolean`, optional): Resolve friendly filter values into normalized IDs before searching. The API default is true.
- `companies` (`object`, optional): Company filter with include and exclude lists of company names or domains, and ids (company IDs from leadmagic_lookup_job_search_companies). Example: {"include": ["stripe.com"]}.
- `company_size_codes` (`array`, optional): Company size codes to match, from leadmagic_get_job_search_catalogs. Example: [3, 4].
- `company_type_ids` (`array`, optional): Company type IDs to match, from leadmagic_get_job_search_catalogs. Example: [1].
- `cursor` (`string`, optional): The pagination.next_cursor value from the previous page. Send it unchanged with the same filters and limit.
- `has_remote` (`boolean`, optional): true to return remote jobs only, false for non-remote only. Leave empty for both.
- `include_description` (`boolean`, optional): Include the job description text. The API default is false; true can slow the response.
- `include_facets` (`boolean`, optional): Include facet counts. The API default is false; true can slow the response.
- `industry_ids` (`array`, optional): Industry IDs to match, from leadmagic_get_job_search_catalogs. Example: [7].
- `job_type_ids` (`array`, optional): Job type IDs to match, from leadmagic_get_job_search_catalogs. Example: [1, 2].
- `languages` (`array`, optional): Posting languages to match, for example ["en"].
- `limit` (`integer`, optional): Jobs per page. The API default is 25 and the maximum is 50.
- `location` (`object`, optional): Location filter with countries, regions, states and cities lists of names, codes or IDs (see leadmagic_lookup_job_search_locations). Example: {"countries": ["US"], "cities": ["Austin"]}.
- `mode` (`string`, optional): fast (the API default) returns paged browsing results; deep enables broader text matching. One of: `fast`, `deep`.
- `occupation_taxonomy` (`object`, optional): Occupation taxonomy filter with level1, level2 and level3 lists of labels or IDs (see leadmagic_lookup_job_search_occupations). Example: {"level2": ["DevOps"]}.
- `posted_after` (`string`, optional): Only jobs posted on or after this date, in YYYY-MM-DD format.
- `posted_before` (`string`, optional): Only jobs posted on or before this date, in YYYY-MM-DD format.
- `posted_within` (`integer`, optional): Only jobs posted within the last N days, for example 30.
- `salary` (`object`, optional): Salary range in US dollars with min_usd and max_usd. Example: {"min_usd": 120000, "max_usd": 200000}.
- `seniority` (`array`, optional): Seniority levels to match, for example ["senior", "lead"]. Valid values are listed by leadmagic_get_job_search_catalogs.
- `tags` (`object`, optional): Tag filter with include and exclude lists of tag names or IDs (see leadmagic_lookup_job_search_tags). Example: {"include": ["kubernetes"]}.
- `titles` (`object`, optional): Title filter with include and exclude lists of title strings, and vector (default false) for semantic matching. Example: {"include": ["Engineer"], "exclude": ["Intern"], "vector": false}.
- `total_mode` (`string`, optional): How the total is counted: none, capped (the API default) or exact. One of: `none`, `capped`, `exact`.

Example input: `{}`

### `leadmagic_search_meta_ads`

Search Meta Ads · Read-only

Find the Meta (Facebook and Instagram) ads a company is running, from its domain or name.
Returns ads_count and the list of ads found, or a not-found message. Costs 1 credit per ad returned.
Use this for Meta ad research. Use leadmagic_search_google_ads for Google ads, and leadmagic_search_b2b_ads for B2B social ads.

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

Inputs:

- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Provide this or company_name.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Provide this or company_domain.
- `limit` (`integer`, optional): Maximum number of ads to return, 1 to 100. Each ad returned costs 1 credit, so this also caps the spend. Leave empty to return every ad found.

Example input: `{}`

### `leadmagic_search_people`

Search People · Read-only

Search for people by company, title, role, seniority, function, location and contact availability.
Returns people with profile fields, nested company and domain_intel objects, has_email and has_mobile_phone flags, and next_cursor for paging. It never returns email addresses or phone numbers.
Use this to build prospect lists. Then call leadmagic_find_email or leadmagic_find_mobile for chosen people. Use leadmagic_find_employees for a simple list of one company's staff.

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

Inputs:

- `channel_match` (`string`, optional): How required_email and required_mobile combine: any (the API default) or all. One of: `any`, `all`.
- `company_domain` (`string`, optional): Company website domain without protocol or path, for example leadmagic.io. The domain is the most accurate way to identify a company. Limits results to this one company.
- `company_filters` (`object`, optional): Criteria for the set of companies to search in, using the same keys as leadmagic_search_companies company_filters: for example company_domains, industries, employee_ranges, country_codes, has_funding and technographic keys such as crm_tech. Example: {"company_domains": ["leadmagic.io"], "crm_tech": ["Salesforce"]}.
- `company_name` (`string`, optional): Company name, for example LeadMagic. Less precise than the domain; use it when the domain is unknown. Limits results to this one company.
- `cursor` (`string`, optional): The next_cursor value from the previous page. Send it unchanged with the same filters, a limit of 50 or less, and no offset.
- `include_company` (`boolean`, optional): Include the nested company object on each person. The API default is true.
- `include_domain_intel` (`boolean`, optional): Include the nested domain_intel object on each person. The API default is true.
- `limit` (`integer`, optional): Number of people per page. The API default is 25. Cursor pages are capped at 50; offset requests allow up to 10000.
- `linkedin_url` (`string`, optional): B2B company profile URL or slug, for example https://www.linkedin.com/company/acme/. Limits results to this one company.
- `offset` (`integer`, optional): Legacy offset paging, deprecated in favor of cursor; pages can repeat or skip rows. Do not combine a non-zero offset with cursor.
- `people_filters` (`object`, optional): People-level filters. Keys use the contact_ prefix: contact_job_title, contact_job_function (Sales, Marketing, Finance, Engineering, ...), contact_job_level (VP, Director, C-Team, ...), contact_country_code, contact_city, contact_full_name and more, plus numeric bounds such as min_contactability_score (0-100) and persona flags such as is_sales. Values in one array are OR'd; different keys are AND'd. Keys the search cannot use are echoed back in interpreted_search.ignored_people_filters. Example: {"contact_job_level": ["VP", "Director"], "contact_job_function": ["Sales"], "min_contactability_score": 40}.
- `query` (`string`, optional): Free-text people or title query, for example revenue operations leaders.
- `required_email` (`boolean`, optional): When true, only return people who have an email available.
- `required_mobile` (`boolean`, optional): When true, only return people who have a mobile number available.
- `roles` (`array`, optional): Up to 12 roles to match, for example ["Sales", "RevOps"].
- `title` (`string`, optional): A single job title to match, for example VP Sales.
- `titles` (`array`, optional): Up to 12 job titles to match, for example ["VP Sales", "Head of Revenue"].

Example input: `{}`

### `leadmagic_validate_bulk_job`

Validate Bulk Job · Read-only

Check a bulk enrichment submission without creating or running a job, and without spending credits.
Returns the validation result for the payload.
Use this to test a payload before leadmagic_submit_bulk_job.

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

Inputs:

- `product` (`string`, required): The enrichment product to run on every row, for example email_finder, email_validation, mobile_finder, profile_search or company_search. leadmagic_get_bulk_capabilities lists every product and its input fields.
- `callback` (`object`, optional): Optional webhook notified when the job ends. Give an HTTPS url and the events to send (completed, failed, canceled or any; default completed). Example: {"url": "https://hooks.example.com/leadmagic", "events": ["completed"]}.
- `csv` (`string`, optional): The input rows as an inline CSV string with a header row, for example "first_name,last_name,domain\nJane,Doe,example.com". Provide exactly one of rows, csv or file_url.
- `file_name` (`string`, optional): Optional label for the job shown in the LeadMagic dashboard, for example q4-outbound-leads.
- `file_url` (`string`, optional): Public HTTPS URL of a CSV, JSON or JSONL file with the input rows, for example https://example.com/leads.csv. Private, internal and non-HTTPS URLs are rejected. Provide exactly one of rows, csv or file_url.
- `format` (`string`, optional): Format of the file at file_url: csv, json or jsonl. One of: `csv`, `json`, `jsonl`.
- `idempotency_key` (`string`, optional): Optional key that makes retries safe: submitting the same key again does not create a second job.
- `input_mapping` (`object`, optional): Optional mapping from your column names to the product's input fields. Each key is a product input field and each value says where it comes from, for example {"profile_url": {"source": "column", "column": "LinkedIn"}}.
- `metadata` (`object`, optional): Optional free-form metadata stored with the job, for example {"campaign": "q4-outbound"}.
- `priority` (`integer`, optional): Optional numeric processing priority from -1000 to 1000.
- `rows` (`array`, optional): The input rows as a JSON array of objects whose keys are the product's input fields. Example for email_finder: [{"profile_url": "https://www.linkedin.com/in/jane-doe", "company_name": "LeadMagic"}]. Provide exactly one of rows, csv or file_url.

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

### `leadmagic_validate_email`

Validate Email · Read-only

Check whether an email address is deliverable, and enrich it with company data for its domain.
Returns email_status (valid, invalid or unknown), mail server (MX) details, and company information such as name, industry, size and location when the domain is known. Costs 0.25 credits for valid or invalid, and nothing for unknown.
Use this to verify an address you already have. Use leadmagic_find_email to discover a work email from a name and company.

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

Inputs:

- `email` (`string`, required): The email address to validate, for example alex.rivera@example.com.

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

### `leadmagic_add_suppression_emails`

Add Suppression Emails · Write

Add email addresses to an existing suppression list. Emails are stored as SHA-256 hashes.
Returns a success response.
Use this to grow a list. Use leadmagic_create_suppression_list to start a new one.

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

Inputs:

- `emails` (`array`, required): Email addresses to add to the list, for example ["bounced1@example.com"].
- `list_id` (`string`, required): Identifier of the suppression list, for example bounced-2026-q3.

Example input: `{"emails":[],"list_id":"<list_id>"}`

### `leadmagic_create_suppression_list`

Create Suppression List · Write

Create a suppression list of email addresses to exclude from enrichment, with its first emails. Emails are stored as SHA-256 hashes.
Returns the list ID, email count and creation time.
Use this for bounced or opted-out contacts. Use leadmagic_add_suppression_emails to add to an existing list.

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

Inputs:

- `emails` (`array`, required): Email addresses to put on the new list, for example ["bounced1@example.com"].
- `list_id` (`string`, required): Identifier for the new list, for example bounced-2026-q3.

Example input: `{"emails":[],"list_id":"<list_id>"}`

### `leadmagic_pause_bulk_job`

Pause Bulk Job · Write

Pause a queued or running bulk job.
Returns a confirmation.
Use this to stop spending credits temporarily, then leadmagic_resume_bulk_job to continue.

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

Inputs:

- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.

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

### `leadmagic_restart_bulk_job`

Restart Bulk Job · Write

Re-run a bulk job in full, only its failed rows, or from a given row or shard. Re-processed rows spend credits again.
Returns the restarted job state.
Use mode failed_only after checking leadmagic_get_bulk_job_errors.

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

Inputs:

- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.
- `mode` (`string`, optional): Which rows to reprocess: full (the API default), failed_only, from_row (needs start_row_index) or from_shard (needs start_shard_index). One of: `full`, `failed_only`, `from_row`, `from_shard`.
- `start_row_index` (`integer`, optional): Zero-based row to restart from. Required when mode is from_row.
- `start_shard_index` (`integer`, optional): Zero-based shard to restart from. Required when mode is from_shard.

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

### `leadmagic_resume_bulk_job`

Resume Bulk Job · Write

Resume a paused bulk job.
Returns a confirmation.
Use this after leadmagic_pause_bulk_job.

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

Inputs:

- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.

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

### `leadmagic_review_bulk_job`

Review Bulk Job · Write

Cancel a queued or processing bulk job (action reject), or approve a paused job so it continues (action approve). Completed or failed jobs cannot be reviewed.
Returns the job ID and its new status.
Use reject to cancel a job. Use leadmagic_pause_bulk_job and leadmagic_resume_bulk_job to pause and resume without cancelling.

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

Inputs:

- `action` (`string`, required): reject cancels the job; approve lets a paused job continue. One of: `approve`, `reject`.
- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.

Example input: `{"action":"approve","job_id":"<job_id>"}`

### `leadmagic_set_bulk_job_priority`

Set Bulk Job Priority · Write

Change the processing priority of a queued or running bulk job.
Returns the updated job priority.
Use this to speed up or slow down a job relative to the account's other jobs.

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

Inputs:

- `job_id` (`string`, required): UUID of the bulk job, returned as jobId by leadmagic_submit_bulk_job or listed by leadmagic_list_bulk_jobs.
- `priority` (`string`, required): New priority: low, normal or high. One of: `low`, `normal`, `high`.

Example input: `{"job_id":"<job_id>","priority":"low"}`

### `leadmagic_submit_batch`

Submit Batch · Write

Submit a batch of up to 500 items that can mix enrichment products, for asynchronous processing. Spends credits for each processed item.
Returns the created batch with its ID and status.
Use this to enrich mixed requests together. Check cost first with leadmagic_preview_batch_cost and track it with leadmagic_get_batch. Use leadmagic_submit_bulk_job for large single-product lists.

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

Inputs:

- `items` (`array`, required): The items to enrich, up to 500. Each item is an object with product (for example email_finder), input (the product's input fields), and optional client_id, client_name and metadata. Example: [{"product": "email_finder", "input": {"profile_url": "https://www.linkedin.com/in/jane-doe"}}].
- `budget_user_id` (`string`, optional): Member user ID whose credit budget the batch is charged against.
- `client_id` (`string`, optional): Client record to associate the whole batch with.
- `client_name` (`string`, optional): Client name recorded with the batch.
- `idempotency_key` (`string`, optional): Optional key that makes retries safe: submitting the same key again returns the original batch.
- `metadata` (`object`, optional): Free-form metadata stored with the batch, for example {"campaign": "q4-outbound"}.
- `priority` (`string`, optional): Queue priority: normal or low. One of: `normal`, `low`.
- `webhook_url` (`string`, optional): HTTPS URL notified when the batch completes. It must resolve to a public IP address.

Example input: `{"items":[{"product":"email_finder","input":{"profile_url":"https://www.linkedin.com/in/jane-doe"}}]}`

### `leadmagic_submit_bulk_job`

Submit Bulk Job · Write

Submit rows for asynchronous bulk enrichment with one product. Spends credits for each processed row.
Returns jobId, status, queue position and URLs for status, results and errors, plus a progress token.
Use this for large lists. Track it with leadmagic_get_bulk_job_progress or leadmagic_get_bulk_job, then read rows with leadmagic_get_bulk_job_results. Use leadmagic_submit_batch to mix several products in one request.

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

Inputs:

- `product` (`string`, required): The enrichment product to run on every row, for example email_finder, email_validation, mobile_finder, profile_search or company_search. leadmagic_get_bulk_capabilities lists every product and its input fields.
- `callback` (`object`, optional): Optional webhook notified when the job ends. Give an HTTPS url and the events to send (completed, failed, canceled or any; default completed). Example: {"url": "https://hooks.example.com/leadmagic", "events": ["completed"]}.
- `csv` (`string`, optional): The input rows as an inline CSV string with a header row, for example "first_name,last_name,domain\nJane,Doe,example.com". Provide exactly one of rows, csv or file_url.
- `file_name` (`string`, optional): Optional label for the job shown in the LeadMagic dashboard, for example q4-outbound-leads.
- `file_url` (`string`, optional): Public HTTPS URL of a CSV, JSON or JSONL file with the input rows, for example https://example.com/leads.csv. Private, internal and non-HTTPS URLs are rejected. Provide exactly one of rows, csv or file_url.
- `format` (`string`, optional): Format of the file at file_url: csv, json or jsonl. One of: `csv`, `json`, `jsonl`.
- `idempotency_key` (`string`, optional): Optional key that makes retries safe: submitting the same key again does not create a second job.
- `input_mapping` (`object`, optional): Optional mapping from your column names to the product's input fields. Each key is a product input field and each value says where it comes from, for example {"profile_url": {"source": "column", "column": "LinkedIn"}}.
- `metadata` (`object`, optional): Optional free-form metadata stored with the job, for example {"campaign": "q4-outbound"}.
- `priority` (`integer`, optional): Optional numeric processing priority from -1000 to 1000.
- `rows` (`array`, optional): The input rows as a JSON array of objects whose keys are the product's input fields. Example for email_finder: [{"profile_url": "https://www.linkedin.com/in/jane-doe", "company_name": "LeadMagic"}]. Provide exactly one of rows, csv or file_url.

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

### `leadmagic_submit_local_leads_search`

Submit Local Leads Search · Write

Start a bulk search for local businesses for every keyword and location combination. Each unique combination costs 200 credits up front unless dry_run is true.
Returns the queued job (or, with dry_run, the resolved searches, creditsRequired and remaining daily capacity).
Use dry_run first to preview the cost. Track the job with leadmagic_get_bulk_job and read results with leadmagic_get_bulk_job_results.

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

Inputs:

- `cities` (`array`, required): Locations to search, up to 100: city names ("Austin", "Austin, TX", "Toronto") or US ZIP codes ("78704"). ZIP codes resolve to their city. Outside the US, use the city name and set country_codes.
- `keywords` (`array`, required): Business types to search for, up to 25, for example ["plumber", "hvac contractor"]. Each keyword runs once per location.
- `country_codes` (`array`, optional): Two-letter country codes matched by position to cities, or a single code applied to every city. The API default is US.
- `dry_run` (`boolean`, optional): When true, return the resolved searches, credits required and remaining daily capacity without charging or queueing anything.
- `file_name` (`string`, optional): Label for the resulting job, shown in the dashboard, for example texas-trades.

Example input: `{"cities":[],"keywords":[]}`

### `leadmagic_delete_suppression_list`

Delete Suppression List · Destructive

Delete an entire suppression list and all of its emails. This cannot be undone.
Returns a success response.
Use this to retire a list. Use leadmagic_remove_suppression_emails to remove only some emails.

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

Inputs:

- `list_id` (`string`, required): Identifier of the suppression list, for example bounced-2026-q3.

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

### `leadmagic_remove_suppression_emails`

Remove Suppression Emails · Destructive

Remove email addresses from a suppression list.
Returns a success response.
Use this to un-suppress specific contacts. Use leadmagic_delete_suppression_list to remove the whole list.

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

Inputs:

- `emails` (`array`, required): Email addresses to remove from the list, for example ["bounced1@example.com"].
- `list_id` (`string`, required): Identifier of the suppression list, for example bounced-2026-q3.

Example input: `{"emails":[],"list_id":"<list_id>"}`

## Related

Other Marketing connectors ([all 87](/agentkit/connectors/?category=marketing)):

- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Mailchimp](/agentkit/connectors/mailchimp/): Scalekit connector, OAuth, 73 tools
- [Twitter / X](/agentkit/connectors/twitteroauth/): Scalekit connector, OAuth, 92 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 |
