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

# Autopilot

> Start, monitor, download, and cancel bulk Autopilot research runs.

Long-running automated search and research runs. **Consumes credits** upfront for `numResultsExpected`; unused credits are restored when a run completes or is cancelled.

### MCP Tasks

The server advertises the `tasks` capability. For `start_autopilot`, pass a `task` object on `tools/call` to receive a Task handle; poll `tasks/get` at `pollInterval`, then call `tasks/result` once status is terminal. `tasks/cancel` cancels the run. `tasks/result` blocks at most \~25 seconds; if the task is still working, poll `tasks/get` and retry. Clients without task support receive an immediate response with `taskId` and `automatedSearchId` and should use `get_autopilot_status` and `get_autopilot_results_url`.

Access: **All users**. See [Access control](https://docs.seamless.ai/mcp/access-control.md).

| Tool | Read-only | Destructive | Idempotent | Open world |
| - | - | - | - | - |
| [`start_autopilot`](#start_autopilot) | No | No | No | Yes |
| [`get_autopilot_status`](#get_autopilot_status) | Yes | No | Yes | No |
| [`get_autopilot_results_url`](#get_autopilot_results_url) | Yes | No | Yes | No |
| [`cancel_autopilot`](#cancel_autopilot) | No | Yes | No | No |

## start\_autopilot

Consumes credits upfront for every requested result; unused credits are restored when the run finishes or is cancelled. Before calling, confirm with the user the run name, how many results to research (the total from the search you just ran is the ceiling, within the per-type cap on numResultsExpected), and whether to add saved contacts to lists (listIds from get\_lists) or auto-import to a connected CRM (autoImportToCrm; skip the question unless seamless\://me shows a CRM). Reuse the exact filters from the search the user just ran, or pass savedSearchId. One Autopilot per type runs at a time; cancel with tasks/cancel or cancel\_autopilot.

### Arguments

**type** `string` *required*

Autopilot run type: contact or company.

One of: `contact`, `company`.

**numResultsExpected** `integer` *required*

Number of results to research. Contact cap 10,000; company cap 5,000 (enforced per type at execution).

**listIds** `(integer | string)[]`

Optional list IDs (tags) to add researched records to.

Up to 50 items.

**autoImportToCrm** `boolean` (default: false)

When true, auto-import researched records to a connected CRM.

**savedSearchId** `integer | string`

Run the filters held by a saved search, found via list\_saved\_searches. Cannot be combined with other filters.

**companyName** `string[]`

Filter by company names.

Up to 100 items.

**company** `string[]`

Deprecated alias for companyName. Prefer companyName.

Up to 100 items.

**companyNameSearchType** `string` (default: default)

Company name match type.

One of: `default`, `related`, `exact`.

**companyDomain** `string[]`

Filter by company domains.

Up to 100 items.

**contactState** `string[]`

Filter by state or region, named or abbreviated (e.g. \["Texas", "CA", "Ontario"]). Prefix a value with "-" to exclude it. Which entity this applies to is controlled by locationType.

Up to 10 items.

**contactCountry** `string[]`

Filter by country (e.g. \["United States"]). Prefix a value with "-" to exclude it. Which entity this applies to is controlled by locationType. Combined with locations.

Up to 10 items.

**contactZipCode** `string[]`

Filter by zip code. Prefix a value with "-" to exclude it. Which entity this applies to is controlled by locationType.

Up to 10 items.

**locations** `string[]`

Filter by free-form location tags — city, state/region, or country, and the only way to filter by city (e.g. \["Austin, Texas", "Ontario, Canada"]). Prefix a value with "-" to exclude it. Matches any of them, and any companyState too.

Up to 10 items.

**locationRadius** `string | number`

Widen every company location filter, companyZipCode included, to everything within a radius of each value. The value is the radius in miles: 25, 50, 100, or 250. Only geocodable values (cities, zip codes) get a radius.

One of: `25`, `50`, `100`, `250`.

**zipCodesRadius** `string | number`

Widen contactZipCode to everything within a radius of each zip code. The value is the radius in miles: 25, 50, 100, or 250.

One of: `25`, `50`, `100`, `250`.

**timezones** `string[]`

Filter by timezone (e.g. \["Eastern (EST)", "Pacific (PST)"]). Which entity this applies to is controlled by timezoneType.

One of: `Eastern (EST)`, `Central (CST)`, `Mountain (MST)`, `Pacific (PST)`, `Alaska (AKST)`, `Hawaii (HST)`, `New Zealand (NST)`, `Solomon (SST)`, `Australia Eastern (AET)`, `Australia Central (ACT)`, `Japan (JST)`, `China Taiwan (CTT)`, `Vietnam (VST)`, `Bangladesh (BST)`, `India (IST)`, `Indiana Eastern (IET)`, `Pakistan Lahore (PLT)`, `Near East (NET)`, `Middle East (MET)`, `Eastern African (EAT)`, `(Arabic) Egypt (ART)`, `Eastern European (EET)`, `European Central (ECT)`, `Greenwich Mean (GMT)`, `Central African (CAT)`, `Argentina (AGT)`, `Brazil Eastern (BET)`, `Canada Newfoundland (CNT)`, `Puerto Rico and US Virgin Islands (PRT)`, `Midway Islands (MIT)`.

Up to 10 items.

**timezoneType** `string` (default: bothOR)

Determines which entity the timezones filter applies to, using the same values as locationType. Ignored unless timezones is set.

One of: `bothOR`, `bothAND`, `company`, `contact`.

**locationType** `string` (default: bothOR)

Determines which entity the location filters apply to. Use "company" when the location modifies a company noun or appears alongside company attributes (e.g. "SaaS companies in Texas", "companies headquartered in New York", "startups in California"). Use "contact" when explicit personal-location language like "based in", "located in", "live in", or "residing in" is used with a person noun (e.g. "reps based in Chicago, Illinois", "account executives located in Florida"). Use "bothOR" (default) when the query is ambiguous — a role plus "in \[location]" with no company context or personal-location verb (e.g. "VPs of Marketing in Texas", "engineers in Seattle, Washington").

One of: `bothOR`, `bothAND`, `company`, `contact`.

**department** `string[]`

Filter by department.

One of: `Sales`, `Marketing`, `Human Resources`, `IT`, `Engineering`, `Operations`, `Finance`, `Support`, `Legal`, `Project Management`, `Other`.

Up to 5 items.

**industry** `string[]`

Filter by industry (e.g. \["Financial Services", "-Staffing and Recruiting"]). Prefix a value with "-" to exclude it.

Up to 5 items.

**industrySicCodes** `string[]`

Filter by SIC code, independently of `industry` (e.g. \["7372", "-5734"]). Prefix a value with "-" to exclude it.

Up to 5 items.

**industryNaicsCodes** `string[]`

Filter by NAICS code, independently of `industry` (e.g. \["511210", "-561310"]). Prefix a value with "-" to exclude it. Matched against the company's own naicsCode; a company that has no naicsCode also matches when its SIC code maps to a requested code.

Up to 5 items.

**fullName** `string[]`

Filter by contact full name.

Up to 10 items.

**fullname** `string[]`

Deprecated alias for fullName. Prefer fullName.

Up to 10 items.

**name** `string` *required*

Unique name for this Autopilot run (max 200 characters).

**jobTitle** `string[]`

Filter by job title.

Up to 10 items.

**title** `string[]`

Deprecated alias for jobTitle. Prefer jobTitle.

Up to 10 items.

**titlesExactMatch** `boolean` (default: false)

When true, jobTitle must match exactly. Defaults to false (relevance matching, so "VP of Sales" also matches "Vice President, Sales").

**seniority** `string[]`

Filter by seniority level.

One of: `C-Level`, `VP`, `Director`, `Manager`, `Senior`, `Mid-Level`, `Entry Level`, `Other`.

Up to 5 items.

**companyFoundedOn** `string[]`

Filter by years since company was founded.

One of: `Less than 1 Year`, `Last 1-3 Years`, `Last 4-10 Years`, `10+ Years`.

Up to 4 items.

**companySize** `string[]`

Filter by company employee count range. Provide multiple ranges to cover a broader span (e.g. \["11 - 50", "51 - 200"] for 11-200 employees). Values must match exactly.

One of: `0 - 1 (Self-employed)`, `Self-employed`, `2 - 10`, `2 - 10 employees`, `11 - 50`, `11 - 50 employees`, `51 - 200`, `51 - 200 employees`, `201 - 500`, `201 - 500 employees`, `501 - 1,000`, `501 - 1,000 employees`, `1,001 - 5,000`, `1,001 - 5,000 employees`, `5,001 - 10,000`, `5,001 - 10,000 employees`, `10,001+`, `10,001+ employees`.

Up to 10 items.

**employeeSizeRange** `string[]`

Deprecated alias for companySize. Prefer companySize.

One of: `0 - 1 (Self-employed)`, `Self-employed`, `2 - 10`, `2 - 10 employees`, `11 - 50`, `11 - 50 employees`, `51 - 200`, `51 - 200 employees`, `201 - 500`, `201 - 500 employees`, `501 - 1,000`, `501 - 1,000 employees`, `1,001 - 5,000`, `1,001 - 5,000 employees`, `5,001 - 10,000`, `5,001 - 10,000 employees`, `10,001+`, `10,001+ employees`.

Up to 10 items.

**companyRevenue** `string[]`

Filter by company annual revenue range. Provide multiple ranges to cover a broader span (e.g. \["$1M - $5M", "$5M - $20M"] for $1M-$20M). Values must match exactly.

One of: `$0 - $100K`, `$100K - $1M`, `$1M - $5M`, `$5M - $20M`, `$20M - $50M`, `$50M - $100M`, `$100M - $500M`, `$500M - $1B`, `$1B+`.

Up to 10 items.

**lastModifiedAfter** `string`

Only return contacts modified after this date (ISO 8601, e.g. 2025-01-01T00:00:00Z).

**lastModifiedBefore** `string`

Only return contacts modified before this date (ISO 8601, e.g. 2025-12-31T23:59:59Z).

**companyTypes** `string[]`

Filter by company type (Public or Private).

One of: `Public`, `Private`.

Up to 2 items.

**companyFundingTotals** `string[]`

Filter by total funding amount range (e.g. \["$1M-$5M", "$5M-$20M"]).

One of: `$0-$100K`, `$100K-$1M`, `$1M-$5M`, `$5M-$20M`, `$20M-$50M`, `$50M-$100M`, `$100M-$500M`, `$500M-$1B`, `$1B+`.

**companyLatestFundingClassifications** `string[]`

Filter by latest funding round type (e.g. \["Seed", "Series A"]).

One of: `Angel`, `Pre-Seed`, `Seed`, `Series A`, `Series B`, `Series C`, `Series D`, `Series E`, `Series F`, `Series G`, `Series H`, `Series I`, `Series J`, `Other`.

**companyLatestFundingDates** `string[]`

Filter by recency of latest funding round: "90" = last 90 days, "180" = last 180 days, "365" = last year, "1095" = last 3 years.

One of: `90`, `180`, `365`, `1095`.

Up to 4 items.

**contactKeyword** `string[]`

Free-text keywords matched against the contact record (e.g. \["machine learning"]).

Up to 10 items.

**keywordsIsOr** `boolean` (default: false)

How to combine multiple positive companyKeyword values: false (default) requires ALL of them, true matches ANY of them. Values prefixed with "-" are always excluded in either mode.

**technologies** `string[]`

Filter by technologies used by the company (e.g. \["Salesforce", "AWS"]).

Up to 100 items.

**technologiesIsOr** `boolean` (default: true)

How to combine multiple technologies: true (default) matches ANY of them, false requires ALL of them.

**newsTypes** `string[]`

Filter by company news/event type (e.g. \["Acquisition", "Investment"]). Pair with newsTypeDates to bound recency.

One of: `Acquisition`, `Corporate Challenges`, `Cost Cutting`, `Expansion`, `Investment`, `Leadership`, `Partnership`, `Recognition`.

Up to 8 items.

**newsTypeDates** `string[]`

Recency window for newsTypes, in days: "60", "90", "180", or "365". Accepts a single value.

One of: `60`, `90`, `180`, `365`.

Up to 1 item.

**jobChanges** `object`

Filter to contacts who recently changed jobs. Omit a sub-field to let search pick its default.

**properties**

**changeType** `string`

Which kind of job change to match.

One of: `New Hire`, `New Promotion`, `New Hire or New Promotion`.

**dayRange** `string`

How far back to look for the job change.

One of: `Last 60 Days`, `Last 90 Days`, `Last 180 Days`, `Last 365 Days`.

**pastCompany** `object`

Filter to contacts who previously worked at these companies and no longer work there. Names always match on relevance, so aliases and name fragments match too.

**properties**

**names** `string[]` *required*

Former company names to match (required).

Up to 100 items.

**onlyMostRecentDeparture** `boolean`

When true, only match the contact's most recent former company. Defaults to false (match any former company).

**emailAddress** `string[]`

Filter by email address. Finds contacts matching these email addresses.

Up to 100 items.

**phoneNumber** `string[]`

Filter by phone number. Accepts any format (e.g. "+1 (555) 123-4567"); non-digit characters are stripped automatically.

Up to 100 items.

**companyState** `string[]`

Filter by company state, matching any of them (e.g. \["Texas", "California"]). Narrowed by companyCountry when both are given. Prefix a value with "-" to exclude it; an excluded state stands alone, since exclusions narrow on their own.

Up to 10 items.

**companyCountry** `string[]`

Filter by company country (e.g. \["United States"]). Narrows companyState rather than widening it, but does not narrow `locations` — put the country in the tag itself (e.g. "Austin, Texas, United States") to scope a free-form tag. A state and country that do not belong together narrow to nothing and are rejected: companyState \["Texas"] with companyCountry \["Germany"] is an error that names the real country for that state, since no company is in both — use locations when you mean either place rather than both. Prefix a value with "-" to exclude it; an excluded country stands alone and narrows nothing.

Up to 10 items.

**companyZipCode** `string[]`

Filter by company zip code. Widens the other location filters rather than narrowing them — a company matches any of these zip codes, or anything `locations`/companyState ask for — so send it alone to match zip codes only. Prefix a value with "-" to exclude it.

Up to 10 items.

**staffCountRange** `string[]`

Deprecated alias for companySize. Prefer companySize.

One of: `0 - 1 (Self-employed)`, `Self-employed`, `2 - 10`, `2 - 10 employees`, `11 - 50`, `11 - 50 employees`, `51 - 200`, `51 - 200 employees`, `201 - 500`, `201 - 500 employees`, `501 - 1,000`, `501 - 1,000 employees`, `1,001 - 5,000`, `1,001 - 5,000 employees`, `5,001 - 10,000`, `5,001 - 10,000 employees`, `10,001+`, `10,001+ employees`.

Up to 10 items.

**revenueRange** `string[]`

Deprecated alias for companyRevenue. Prefer companyRevenue.

One of: `$0 - $100K`, `$100K - $1M`, `$1M - $5M`, `$5M - $20M`, `$20M - $50M`, `$50M - $100M`, `$100M - $500M`, `$500M - $1B`, `$1B+`.

Up to 10 items.

**foundedOn** `string[]`

Filter by years since the company was founded.

One of: `Less than 1 Year`, `Last 1-3 Years`, `Last 4-10 Years`, `10+ Years`.

Up to 4 items.

**fundingTotals** `string[]`

Filter by total funding amount range (e.g. \["$1M-$5M", "$5M-$20M"]).

One of: `$0-$100K`, `$100K-$1M`, `$1M-$5M`, `$5M-$20M`, `$20M-$50M`, `$50M-$100M`, `$100M-$500M`, `$500M-$1B`, `$1B+`.

**latestFundingClassifications** `string[]`

Filter by latest funding round type (e.g. \["Seed", "Series A"]).

One of: `Angel`, `Pre-Seed`, `Seed`, `Series A`, `Series B`, `Series C`, `Series D`, `Series E`, `Series F`, `Series G`, `Series H`, `Series I`, `Series J`, `Other`.

**latestFundingDates** `string[]`

Filter by recency of latest funding round: "90" = last 90 days, "180" = last 180 days, "365" = last year, "1095" = last 3 years.

One of: `90`, `180`, `365`, `1095`.

Up to 4 items.

**companyKeyword** `string[]`

Free-text keywords matched against the company record (e.g. \["renewable energy"]). Prefix with "-" to exclude; excluded keywords always narrow the results regardless of keywordsIsOr.

Up to 10 items.

### Result

Returns a text `content` block and a `structuredContent` object with these fields. Treat every field as nullable: a value the record does not have comes back as `null`.

**taskId** `string | null`

**automatedSearchId** `number | string | null`

**name** `string | null`

**type** `string | null`

One of: `contact`, `company`.

**status** `string | null`

**numResultsExpected** `number | null`

**numResearched** `number | null`

**totalRecords** `number | null`

**fileVersion** `string | null`

One of: `clean`, `raw`.

**files** `object[] | null`

**properties**

**name** `string | null`

**url** `string | null`

**expiresInSeconds** `number | null`

**hint** `string | null`

## get\_autopilot\_status

Returns status and progress for an Autopilot (automated search) run. Prefer tasks/get for runs started as an MCP task.

### Arguments

**automatedSearchId** `integer | string` *required*

Autopilot run ID.

### Result

Returns a text `content` block and a `structuredContent` object with these fields. Treat every field as nullable: a value the record does not have comes back as `null`.

**automatedSearchId** `number | string | null`

**name** `string | null`

**type** `string | null`

**status** `string | null`

**statusUpdatedAt** `string | null`

**numResultsExpected** `number | null`

**numResultsAvailable** `number | null`

**numResearched** `number | null`

**totalRecords** `number | null`

**isResearched** `boolean | null`

**hasError** `boolean | null`

**canceledByUser** `boolean | null`

**canceledReason** `string | null`

**creditRestorationProcessedAt** `string | null`

**createdAt** `string | null`

**updatedAt** `string | null`

**isTerminal** `boolean | null`

**hint** `string | null`

## get\_autopilot\_results\_url

Returns presigned download URLs for Autopilot result CSV files. URLs expire in 300 seconds; call again for fresh links. Never streams file content.

### Arguments

**automatedSearchId** `integer | string` *required*

Autopilot run ID.

**fileVersion** `string` (default: clean)

File version: clean (researched) or raw.

One of: `clean`, `raw`.

### Result

Returns a text `content` block and a `structuredContent` object with these fields. Treat every field as nullable: a value the record does not have comes back as `null`.

**automatedSearchId** `number | string | null`

**fileVersion** `string | null`

One of: `clean`, `raw`.

**files** `object[] | null`

**properties**

**name** `string | null`

**url** `string | null`

**expiresInSeconds** `number | null`

**hint** `string | null`

## cancel\_autopilot

Cancel a running Autopilot. Irreversible; the current batch may finish before the run stops. Already-researched records are kept and unused credits are restored within a few minutes. For a run started as an MCP task, tasks/cancel is equivalent. Confirm with the user before calling.

> [!WARNING]
>
> May overwrite, remove, or send data in a way that cannot be undone. Ask for
> explicit confirmation before calling this tool in an agent workflow.

### Arguments

**automatedSearchId** `integer | string` *required*

Autopilot run ID to cancel.

### Result

Returns a text `content` block and a `structuredContent` object with these fields. Treat every field as nullable: a value the record does not have comes back as `null`.

**automatedSearchId** `number | string | null`

**name** `string | null`

**type** `string | null`

**status** `string | null`

**statusUpdatedAt** `string | null`

**numResultsExpected** `number | null`

**numResultsAvailable** `number | null`

**numResearched** `number | null`

**totalRecords** `number | null`

**isResearched** `boolean | null`

**hasError** `boolean | null`

**canceledByUser** `boolean | null`

**canceledReason** `string | null`

**creditRestorationProcessedAt** `string | null`

**createdAt** `string | null`

**updatedAt** `string | null`

**isTerminal** `boolean | null`

**hint** `string | null`


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