MCP App Store
by KeenEthics
Business & Operations
Hunter icon

Hunter

by Hunter Web Services, Inc.

Overview

Find and organize companies without leaving ChatGPT. This app connects directly to Hunter to help you discover businesses that match your criteria, enrich them with reliable company-level data, and save the ones you care about. You can search for companies using natural language (for example, by location, industry, size, or technologies), review results with domain-level insights, and enrich any company to get structured information such as industry, headcount range, headquarters location, and tech stack. When a company looks relevant, you can save it straight to your Hunter Leads for later use. Designed for sales, marketing, and research workflows, the app focuses on fast exploration and clean company data. No personal data, no guesswork, just actionable company insights inside ChatGPT.

Tools

Add-Campaign-Recipients

ChatGPT
Use this when the user wants to add recipients to an existing campaign by email address or by lead ID. Up to 50 per call; batch larger sets across multiple calls. Adding a recipient does not send email on its own — sending requires Start-Campaign. Free to call.

Add-Company-To-List

ChatGPT
Use this when the user wants to save a company to a static company list. Identify the list by company_list_id and the company by company_id (a company already saved in the user's account). Both the list and the company must belong to the user's team, and the list must be static — dynamic lists collect companies automatically by their filters and cannot have companies added manually. Returns the added company (id, domain, created_at); surface the saved company's domain to confirm. Returns an invalid_input error (id validation_failed) if the company is already in the list, a not-found error if the list or company does not exist, belongs to another team, or the list is dynamic, or a forbidden error if the user is not allowed to modify this list. Free to call.

Add-Sequence-Recipients

ChatGPT
Use this when the user wants to add recipients to an existing sequence by email address or by lead ID. Up to 50 per call; batch larger sets across multiple calls. For a draft (not-yet-started) sequence this only stages recipients, does not send email, and runs immediately — use Start-Sequence to begin sending. For an ALREADY-STARTED sequence, adding a recipient immediately schedules a real outbound email to that recipient (no separate Start-Sequence call) and therefore requires explicit user confirmation: the first call returns a confirmation prompt without adding anyone, and only re-issuing with confirmed: true performs the add. Free to call.

Add-Tag-To-Lead

ChatGPT
Use this when the user wants to tag a lead, identified by lead_id. Provide either tag_id (an existing tag) or tag_name; with tag_name, a tag that does not exist yet is created automatically with a random color. Call List-Lead-Tags first and suggest reusing an existing tag (by tag_id or its exact name) before introducing a near-duplicate name. The call is idempotent: re-adding a tag the lead already has still succeeds. Returns the lead's full current tag set (tags, each with id, name, and color) — surface it to confirm. Returns an invalid_input error (id tag_required) if neither tag_id nor tag_name is given, a not-found error if the lead or the tag does not exist or belongs to another team, or an invalid_input error (id validation_failed) if the new tag name is invalid. Free to call.

Archive-Sequence

ChatGPT
Use this when the user wants to archive a started sequence to file it once it is finished. Only a started sequence (active or paused) can be archived: archiving a draft (a sequence that was never started) returns an invalid_input error (id sequence_not_started) — tell the user the sequence has to be started before it can be archived. Archiving an already-archived sequence is idempotent and succeeds. The response reports the sequence id and its archived state — surface that the sequence is now archived. Archiving stops the sequence from sending and cannot be undone through the API: an archived sequence cannot be resumed or un-archived via the API, so confirm with the user before archiving. Returns a not-found error if the sequence does not exist or belongs to another user (this endpoint is owner-only). Free to call.

Bulk-Copy-Companies

ChatGPT
Use this when the user wants to copy many companies at once into a static company list, leaving the source selection untouched. Select the companies by explicit company_ids and/or by a source company_list_id (at least one is required); target_company_list_id is the static destination list. The copy runs asynchronously — the response reports the matched companies_count with status queued. The destination is modified, so a regular team member must own it (otherwise a forbidden error). Returns a not-found error if a list does not exist in the team and an invalid_input error if the destination is dynamic or no companies match the selection. Copying requires an explicit user confirmation: the first call returns a confirmation prompt stating the affected count without copying anything, and only re-issuing with confirmed: true performs the copy. Free to call.

Bulk-Delete-Companies

ChatGPT
Use this when the user wants to delete many companies at once, selected by explicit company_ids and/or by a whole company_list_id. Deleting companies is permanent and cannot be undone; a regular team member only deletes their own companies. Selections of 10 or fewer companies are deleted synchronously and the response reports the exact deleted_count with status completed; larger selections are queued for asynchronous deletion (status queued with the matched requested_count). Returns a not-found error if the company list does not exist in the team and an invalid_input error when no companies match the selection. Deleting companies requires an explicit user confirmation: the first call returns a confirmation prompt stating the affected count without deleting anything, and only re-issuing with confirmed: true performs the deletion. Free to call.

Bulk-Delete-Leads

ChatGPT
Use this when the user wants to delete many leads at once, selected by explicit lead_ids and/or by a whole leads_list_id. Deleting leads is permanent and cannot be undone. Selections of 10 or fewer leads are deleted synchronously and the response reports the exact deleted_count with status completed; larger selections are queued for asynchronous deletion (status queued with the matched requested_count). Returns a not-found error if the leads list does not exist in the team and an invalid_input error when no leads match the selection. Deleting leads requires an explicit user confirmation: the first call returns a confirmation prompt stating the affected count without deleting anything, and only re-issuing with confirmed: true performs the deletion. Free to call.

Bulk-Move-Companies

ChatGPT
Use this when the user wants to move many companies at once from one static company list to another. Both lists must be static (not dynamic) and different; company_ids optionally narrows the move to specific companies inside the source list, otherwise every company in the source list is moved. The move runs asynchronously — the response reports the matched companies_count with status queued. Both lists are modified, so a regular team member must own them (otherwise a forbidden error). Returns a not-found error if either list does not exist in the team and an invalid_input error if a list is dynamic or no companies match the selection. Moving companies requires an explicit user confirmation: the first call returns a confirmation prompt stating the affected count without moving anything, and only re-issuing with confirmed: true performs the move. Free to call.

Bulk-Move-Leads

ChatGPT
Use this when the user wants to move many leads at once from one static leads list to another. Both lists must be static (not dynamic) and different; lead_ids optionally narrows the move to specific leads inside the source list, otherwise every lead in the source list is moved. The move runs asynchronously — the response reports the matched leads_count with status queued, and the leads appear in the destination list shortly after. Returns a not-found error if either list does not exist in the team and an invalid_input error if a list is dynamic or no leads match the selection. Moving leads requires an explicit user confirmation: the first call returns a confirmation prompt stating the affected count without moving anything, and only re-issuing with confirmed: true performs the move. Free to call.

Combined-Enrichment

ChatGPT
Use this when the user provides an email address or LinkedIn handle and wants both the person's profile and their company's profile in a single response. Costs 1 enrichment credit, only charged when data is found. Do not use this when the user only needs one side of the picture — call Person-Enrichment or Company-Enrichment directly to keep the response narrow.

Company-Enrichment

ChatGPT
Use this when the user wants to look up a company by domain and see its industry, size, location, technologies, funding rounds, and social profiles. Does not return personal data (PII). Costs 1 enrichment credit, only charged when data is found. Do not use this for personal websites or webmail domains (gmail.com, yahoo.com, etc.) — there is no company behind those domains to enrich.

Count-Company-Emails

ChatGPT
Use this when the user wants to know how many email addresses Hunter has at a set of companies — for example, right after a Find-Companies result. For each company it reports emails_count.personal (addresses tied to a named person), emails_count.generic (role-based addresses such as info@ or sales@), and emails_count.total. meta.total_emails sums the same counters across ALL matching companies, not just the current page. Returns counts only. Each company row has an emails_on_hunter link where the user can see the addresses on hunter.io. Provide either query (natural-language criteria, translated to filters exactly like Find-Companies) or domains (exact company domains, e.g. lifted from a Find-Companies result); when both are given, query takes precedence and domains is not sent. Free to call.

Create-Company-List

ChatGPT
Use this when the user wants to create a new company list. Provide a name. By default the list is static (the user adds companies to it themselves). To create a dynamic list that automatically collects companies matching saved criteria, set type to dynamic and supply filters (a set of key/value criteria). Optionally place the list inside a folder with company_list_folder_id. Returns an invalid_input error (id validation_failed) if the name is missing, is already used by another list in the user's team, or a dynamic list is created without valid filters. Free to call.

Create-Company-List-Folder

ChatGPT
Use this when the user wants to create a new company-list folder. Provide a name and a color. color must be one of the allowed Hunter folder colors (hex without a leading '#'): 374151, 3489F9, 10B981, F5BA0B, EF4444, 7C3AED, F97316, E5E7EB, B4D9F7, BAE6B0, FDE68A, FBD0D0, D4C4F8, FFD79B. Returns an invalid_input error (id validation_failed) if the name is missing or already used by another folder in the user's team, or if the color is missing or not one of the allowed values. Free to call.

Create-Custom-Attribute

ChatGPT
Use this when the user wants to define a new custom attribute on leads, identified by label. Free to call.

Create-Lead

ChatGPT
Use this when the user wants to create a new lead in their Hunter account. Email is required; other fields are optional. Pass leads_list_id to add the lead directly to a list. Free to call.

Create-Lead-If-Missing

ChatGPT
Use this when the user wants to save a verified contact as a new lead without modifying any existing lead. If a lead with the email already exists, returns the existing record unchanged with alreadyExisted: true and reports "already exists; no changes made"; otherwise creates the lead with the supplied fields. Never overwrites, never moves to a list, never enriches existing records. Use Create-Or-Update-Lead instead when the user explicitly wants to overwrite an existing lead. Free (no credits).

Create-Lead-Tag

ChatGPT
Use this when the user wants to create a new lead tag. Before creating one, call List-Lead-Tags and prefer reusing an existing tag with the same meaning (e.g. "Customers" vs "customer") instead of creating a near-duplicate — Add-Tag-To-Lead can also create a tag on the fly by name while tagging. Provide a name; color is optional and must be one of the allowed Hunter tag colors (hex without a leading '#'): 374151, 3489F9, 10B981, F5BA0B, EF4444, 7C3AED, F97316, E5E7EB, B4D9F7, BAE6B0, FDE68A, FBD0D0, D4C4F8, FFD79B — when omitted, Hunter picks a random color from that palette. Tags are shared with the whole team. Returns an invalid_input error (id validation_failed) if the name is missing, longer than 255 characters, or already used by another lead tag in the user's team. Free to call.

Create-Leads-List

ChatGPT
Use this when the user wants to create a new, empty leads list with the given name. Free to call.

Create-Leads-List-Folder

ChatGPT
Use this when the user wants to create a new leads-list folder to group leads lists — worth suggesting once the account has many lists. Provide a name; color is optional and must be one of the allowed Hunter folder colors (hex without a leading '#'): 374151, 3489F9, 10B981, F5BA0B, EF4444, 7C3AED, F97316, E5E7EB, B4D9F7, BAE6B0, FDE68A, FBD0D0, D4C4F8, FFD79B — when omitted, Hunter picks a random color from that palette. A team can have at most 100 folders. Returns an invalid_input error (id validation_failed) if the name is missing or already used by another folder in the user's team, if the color is not one of the allowed values, or if the folder limit is reached. Free to call.

Create-Message-Template

ChatGPT
Use this when the user wants to save a reusable message template — including when they ask to save a message draft written in chat (e.g. a sequence introduction or follow-up they liked) as a new template for later reuse. name and body are required; subject is optional and message_format defaults to html. The saved template can then pre-fill sequence steps via Create-Sequence-Follow-Up's message_template_id. Personalization placeholders like {{first_name}} are supported in the subject and body, and a fallback goes after a colon: {{first_name:"there"}}. The colon is the only separator that works — everything before it is read as the attribute name, so a piped form like {{first_name|fallback:"there"}} silently renders as an empty string. Placeholders carrying the literal fallback markers FALLBACK or DEFAULT are rejected with a validation error. Free to call.

Create-Or-Update-Lead

ChatGPT
Use this when the user explicitly wants to create a lead or overwrite an existing lead's fields by email. If a lead with the email exists, its fields are overwritten with the supplied values; otherwise a new lead is created. Free to call. Overwriting an existing lead's fields cannot be undone from the API. For save-without-overwrite semantics, use Create-Lead-If-Missing instead.

Create-Sequence

ChatGPT
Use this when the user wants to create a new outreach sequence. Only name is required; the sequence is created as a DRAFT that sends nothing until it is started. Lifecycle: draft → started (Start-Sequence) → paused/archived — the schedule and sender fields lock once started, so configure them while drafting. Optional fields: sender email_account_ids (connected email accounts — see List-Email-Accounts; unknown ids are rejected with unknown_email_account_ids), schedule_days (0=Monday..6=Sunday; a Monday-Friday schedule is [0, 1, 2, 3, 4], not [1, 2, 3, 4, 5]), the daily sending window schedule_time_start/schedule_time_end (seconds since midnight, start before end), a start_at date (YYYY-MM-DD, not in the past), bcc_recipient, and tracking toggles (tracked_links requires a premium plan). The introduction email (step 0) is created automatically with an empty subject and body, and Start-Sequence fails validation while it is blank — fill it in with Update-Sequence-Follow-Up, targeting the step whose step is 0 (get its id from List-Sequence-Follow-Ups). Typical next steps: write the introduction email with Update-Sequence-Follow-Up, append any further steps with Create-Sequence-Follow-Up, add recipients with Add-Sequence-Recipients, then launch with Start-Sequence (a connected email account, subject, and message body are required to start). Given a sending account that is already connected, the whole sequence can be built this way without opening the Hunter dashboard. Connecting a sending inbox is the one step that still needs the dashboard — the API only attaches an ALREADY-connected account, and email-account settings are read-only here. Free to call.

Create-Sequence-Follow-Up

ChatGPT
Use this when the user wants to add an email step to a sequence. Author the sequence step-by-step in conversation: draft the subject and body with the user, set wait_days (days after the previous step, 0-999), create the step, then show the updated step list with List-Sequence-Follow-Ups. Also offer the team's saved templates (List-Message-Templates): passing message_template_id pre-fills whichever of subject, body, and message_format are left blank. The step number is assigned automatically after the current last step, so this tool always appends a new follow-up and can never target step 0 — to author the introduction email (step 0), or to rewrite any existing step, use Update-Sequence-Follow-Up instead. Omitting subject makes the step inherit the previous step's subject so the emails thread together. A sequence holds at most 6 steps in total (the introduction plus up to 5 follow-ups); exceeding that, or adding to an actively sending sequence (pause it first) or an archived one, is rejected with an invalid_input error. Free to call.

Delete-Company-List

ChatGPT
Use this when the user wants to delete a company list by ID. Empty lists and dynamic lists are deleted immediately (status 204). A static list that still contains companies is deleted asynchronously: a background job removes its companies and the call returns status 202 (accepted) right away. Deleting a list cannot be undone from the API. Returns a not-found error if the list does not exist or belongs to another team. Free to call.

Delete-Company-List-Folder

ChatGPT
Use this when the user wants to delete a company-list folder by ID. Deleting a folder does not delete the company lists filed in it — each affected list keeps existing and simply becomes unfiled (its folder is cleared). Deleting a folder cannot be undone from the API. Only the folder's owner, a team admin, or the team owner may delete it. Succeeds with no content on success. Returns a not-found error if the folder does not exist, or a forbidden error if the user is not allowed to delete it. Free to call.

Delete-Custom-Attribute

ChatGPT
Use this when the user wants to permanently delete a custom-attribute definition, identified by ID. Per-lead values stored for the attribute are dropped and cannot be recovered. Free to call.

Delete-Lead

ChatGPT
Use this when the user wants to remove a lead from their Hunter account, identified by ID. Free to call. Deleting a lead cannot be undone from the API.

Delete-Lead-Tag

ChatGPT
Use this when the user wants to delete a lead tag by ID. Deleting a tag removes it from EVERY lead it is applied to (the tag's assignments are destroyed with it); the leads themselves are untouched. This cannot be undone from the API, so confirm with the user before deleting a tag that may still be in use — to detach a tag from a single lead instead, use Remove-Tag-From-Lead. Only the tag's owner, a team admin, or the team owner may delete it. Succeeds with no content on success. Returns a not-found error if the tag does not exist or belongs to another team, or a forbidden error if the user is not allowed to delete it. Free to call.

Delete-Leads-List

ChatGPT
Use this when the user wants to permanently delete a leads list, identified by ID. Lists with more than 10 leads are scheduled for asynchronous deletion (HTTP 202). Free to call. Deleting a list cannot be undone from the API.

Delete-Leads-List-Folder

ChatGPT
Use this when the user wants to delete a leads-list folder by ID. Deleting a folder does not delete the leads lists filed in it — each affected list keeps existing and simply becomes unfiled (its folder is cleared and it is re-ordered after the existing unfiled lists). Deleting a folder cannot be undone from the API. Only the folder's owner, a team admin, or the team owner may delete it. Succeeds with no content on success. Returns a not-found error if the folder does not exist, or a forbidden error if the user is not allowed to delete it. Free to call.

Delete-Message-Template

ChatGPT
Use this when the user wants to permanently delete a saved message template by ID. Deleting cannot be undone from the API. Sequence steps already created from this template keep their own copy of the subject and body, so deleting the template does not change any existing sequence. Returns a not-found error if the template does not exist or belongs to another team. Free to call.

Delete-Sequence

ChatGPT
Use this when the user wants to permanently delete a DRAFT sequence. Deletion is drafts-only: a started or archived sequence cannot be deleted (invalid_input error, id sequence_not_destroyable) — archive a finished sequence instead. Deletion is permanent and cannot be undone; it removes the sequence together with its steps and staged recipients, so always confirm with the user first: the first call returns a confirmation prompt (mentioning how many recipients would be removed) WITHOUT deleting anything, and only re-issuing with confirmed: true actually deletes the sequence. Returns a not-found error if the sequence does not exist or belongs to another team. Free to call.

Delete-Sequence-Follow-Up

ChatGPT
Use this when the user wants to remove a step from a sequence. Only the LAST step can be deleted — to redo an earlier step, delete steps from the end back down to it, then re-create them. Deletion is rejected with an invalid_input error when the step is the introduction (step 0 can never be deleted), is not the last step, already has sent messages, is part of an A/B test (disable A/B testing first), or when the sequence is actively sending (pause it first), scheduled to start, or archived. On success the step is permanently removed and an acknowledgement is returned. Returns a not-found error if the sequence or the step does not exist or belongs to another team. Free to call.

Email-Count

ChatGPT
Use this when the user wants the count of email addresses Hunter has indexed for a domain, optionally split by personal vs generic. Free to call. Do not use this as a substitute for Domain-Search; this returns a count only, not the email list itself.

Email-Finder

ChatGPT
Use this when the user wants a specific person's email address at a company. Provide the person's full name and the company's domain. Costs 1 search credit, only charged when an email is found. Do not use this when the user already has the email and only wants to confirm it works — call Email-Verifier instead.

Email-Verifier

ChatGPT
Use this when the user wants to check whether an email address is deliverable. Returns a status (valid, invalid, accept_all, etc.) and a confidence score. Costs 1 verification credit, only charged for valid, invalid, or accept_all results. Do not use this on role/group addresses (info@, support@, etc.) — deliverability of role addresses is not meaningful and the result will typically be accept_all.

Favorite-Company-List

ChatGPT
Use this when the user wants to mark a company list as a favorite, identified by ID. Favoriting is a reversible flag (it can be undone later) and does not change the list's contents. The call is idempotent: favoriting a list that is already a favorite still succeeds and returns favorited: true. Surface the favorited: true response to confirm the action succeeded. Returns a not-found error if the list does not exist or belongs to another team. Free to call.

Favorite-Leads-List

ChatGPT
Use this when the user wants to mark a leads list as a favorite, identified by ID. Favorites are a personal flag for the current user, and a favorited list is a strong signal of their preferred working list — suggest it as the default destination when the user saves new leads without naming a list. Favoriting is reversible (it can be undone later) and does not change the list's contents. The call is idempotent: favoriting a list that is already a favorite still succeeds and returns favorited: true. Surface the favorited: true response to confirm the action succeeded. Returns a not-found error if the list does not exist or belongs to another team. Free to call.

Find-Companies

ChatGPT
Use this when the user wants to search for companies that match natural-language criteria such as location, industry, size, type, or technologies. Returns up to 100 matching companies per page; use offset to paginate. The response includes meta.permalink — a link to the same query on hunter.io that the user can open to view all results with the inferred filters applied. Free to call. Do not use this when the user has already named a specific company — call Company-Enrichment directly with that company's domain.

Get-Account-Details

ChatGPT
Use this when the user asks about their Hunter plan or remaining credits. Returns plan name and per-product credit balances (search, verification, enrichment). Does not return personal identifiers such as name, email, or team ID. Free to call.

Get-Company-List

ChatGPT
Use this when the user wants the details of a single company list, identified by ID: its name, type (static or dynamic), filters (for dynamic lists), company_list_folder_id, created_at, and companies_count (the number of companies currently in the list). Returns a not-found error if the list does not exist or belongs to another team. Free to call.

Get-Connected-App

ChatGPT
Use this when the user wants the details of a single connected app, identified by ID, including its attribute_mappings — the list of target_field ↔ source_field pairs that map Hunter fields to the integration's fields. Present the mappings as a table or list. Also returns the provider, resolved name, category, provider_email, and connected_at / updated_at timestamps. Returns a not_found error if the app does not exist or belongs to a different team. Free to call.

Get-Custom-Attribute

ChatGPT
Use this when the user wants to retrieve a single custom-attribute definition by ID. Free to call.

Get-Email-Account

ChatGPT
Use this when the user wants to see how a specific sending email account is set up — e.g. "how is alice@acme.com configured?" — as a pre-check before suggesting changes to its settings. On top of the List-Email-Accounts fields (email, first/last name, sending_status, daily_limit, provider), it reports the sender_name shown on outgoing emails, whether it is the default_account, the email signature (sanitized HTML, null when none is stored), the owner's profile_picture_url, the team's custom_tracking_domain (null unless a verified custom tracking domain is configured), the default sending_schedule (days of week, HH:MM start/end times, and time zone) a new sequence sending from this account would run on, and the warmup state (enabled, status, end_date). Email account settings can NOT be changed through this API — inspection is read-only and settings writes are not yet available — so suggest changes for the user to apply in the hunter.io dashboard rather than offering to apply them. Returns a not-found error if the email account does not exist or is not one the user can manage. Free to call.

Get-Lead

ChatGPT
Use this when the user wants to retrieve a single lead from their Hunter account by ID. Free to call.

Get-Leads-List

ChatGPT
Use this when the user wants to retrieve a single leads list (name, lead count, timestamps) by ID. Free to call.

Get-Message-Template

ChatGPT
Use this when the user wants to inspect a single saved message template by ID — its full subject, body, and message_format — for example to preview it before reusing it in a sequence follow-up (via Create-Sequence-Follow-Up's message_template_id), or to copy and adapt its content. Returns a not-found error if the template does not exist or belongs to another team. Free to call.

Get-Sequence

ChatGPT
Use this when the user wants to inspect one sequence's full configuration. Returns the lifecycle status (draft, planned, active, paused, completed, preparing, error, or archived) plus the raw started/paused/archived booleans, the schedule (start_at date, daily sending window as HH:MM strings, days of week as integers 0=Monday..6=Sunday), the settings (open tracking, link tracking, unsubscribe link, AI assistant, BCC recipient), the sender email_account_ids, a follow_ups step summary (unique_steps_count and step numbers — use List-Sequence-Follow-Ups for the step contents), recipients_count, and the owner. Returns a not-found error if the sequence does not exist or belongs to another team. Free to call.

Get-Sequence-Follow-Up

ChatGPT
Use this when the user wants to inspect a single step of a sequence by its follow-up ID (from List-Sequence-Follow-Ups). Returns the step number (0 is the introduction email), wait_days, subject, body, message_format (text or html), messages_sent, and variant (null, or A/B for A/B-tested steps). Unlike List-Sequence-Follow-Ups, subject is returned raw: a step that inherits the previous step's subject shows an inheritance placeholder instead of the resolved text. Returns a not-found error if the sequence or the step does not exist or belongs to another team. Free to call.

Get-Sequence-Stats

ChatGPT
Use this when the user wants to see how a sequence is performing. Reports recipient-based stats for a sequence plus a per-follow-up breakdown. The top-level engagement totals (sent, delivered, opened, clicked, replied, unsubscribed_recipients) count DISTINCT recipients — e.g. replied is the number of recipients who replied at least once, not the number of reply messages — and delivered is the recipients who received at least one non-bounced email (recipients_count is all recipients ever added to the sequence). bounced is message-based (a bounce is an SMTP-level event). The rate fields (open_rate, click_rate, reply_rate, bounce_rate, unsubscribed_recipients_rate) are floats in the 0.0-1.0 range — multiply by 100 to present them as percentages to the user — and are 0 when their denominator is 0; open_rate, click_rate, and reply_rate divide by distinct delivered recipients, while bounce_rate is message-based. The follow_ups array reports MESSAGE-based metrics per step (ordered by step, then variant; variant is null for the default follow-up or A/B for A/B-tested steps), so per-step counts do not sum to the recipient-based top-level totals. Returns a not-found error if the sequence does not exist or belongs to another team. Free to call.

Get-Usage

ChatGPT
Use this when the user wants to know how many Hunter credits or requests they have left in the current billing period — and proactively BEFORE any large credit-consuming action (many email verifications or company enrichments): check the remaining quota first and warn the user when the planned work would exceed it. Reports per-bucket usage — searches and verifications, plus a credits summary on plans with a single credits bucket — each with used, available, and remaining, and reset_date (the day the quota resets, i.e. the end of the current billing period). Reading usage consumes no credits and no requests. Free to call.

Lead-Exists

ChatGPT
Use this when the user wants to check whether a lead with a given email already exists in their Hunter account. Returns the lead ID and list info if present. Free to call.

List-Campaign-Recipients

ChatGPT
Use this when the user wants to list the recipients of a campaign with per-recipient status. Free to call.

List-Campaigns

ChatGPT
Use this when the user wants to list the campaigns in their Hunter account with name, status, and counts. Campaigns are created in the Hunter web UI; the API can list them, manage recipients, and start them. Free to call.

List-Company-List-Folders

ChatGPT
Use this when the user wants to see the company-list folders in their Hunter account. Folders group company lists. Lists are ordered with the most recently created first. Each folder reports its name, color (a hex color string), company_lists_count (how many lists are filed in it), and created_at. Folders are visible to the whole team. Supports limit and offset pagination. Free to call.

List-Company-Lists

ChatGPT
Use this when the user wants to see the company lists in their Hunter account. Lists are ordered with the most recently created first. Each list reports its type — static (a fixed set of companies the user adds manually) or dynamic (companies matched automatically by saved filters, which are included for dynamic lists) — along with its name, company_list_folder_id (the folder it lives in, or null), and created_at. Surface the type for each list, and for dynamic lists mention the filters for context. Supports limit and offset pagination. Free to call.

List-Connected-Apps

ChatGPT
Use this when the user wants to see the connected apps (third-party integrations such as HubSpot, Pipedrive, Google Sheets, or a custom SMTP/IMAP inbox) linked to their Hunter account. Surface each app's provider and resolved name clearly: canonical names like Google Sheets come from Hunter's internal catalog, while others fall back to the provider name. Each entry also includes category, provider_email, and the connected_at / updated_at timestamps. Supports limit and offset pagination. Returns an empty list if no apps are connected. To inspect a specific app's field mappings, follow up with Get-Connected-App using its id. Free to call.

List-Custom-Attributes

ChatGPT
Use this when the user wants to list all custom attributes defined on leads in their Hunter account. Free to call.

List-Email-Account-Sequences

ChatGPT
Use this when the user wants to know what is using a given email account — e.g. "which sequences send from alice@acme.com?" — as a dependency check before pausing, reconfiguring, or disconnecting an account. Pairs with List-Email-Accounts (find the account and its id) and Get-Email-Account (inspect its configuration). Each entry reports the sequence id, name, status (draft, planned, active, paused, or archived), recipients_allocated (recipients assigned to this account within the sequence, canceled recipients excluded), and emails_scheduled (emails still waiting to be sent from this account), most recent first. Archived sequences are excluded by default; pass include_archived: true to include them. Supports limit and offset pagination. Returns a not-found error if the email account does not exist or is not one the user can manage. Free to call.

List-Email-Accounts

ChatGPT
Use this when the user wants to see the email accounts (sending inboxes) connected to their Hunter account, typically as the first step before creating or starting a sequence. Surface each account's sending_status clearly: active means it is ready to send, paused means it is disconnected and will not send until reconnected, and warming means it is in ramp-up or warmup and currently sends a reduced volume. Each entry also includes the sender's email, name, daily sending limit, and provider (such as gmail or outlook). Supports limit and offset pagination. Free to call.

List-Lead-Tags

ChatGPT
Use this when the user wants to see the lead tags in their Hunter account — and ALWAYS before tagging leads or creating a new tag, so you can suggest reusing an existing tag instead of creating a near-duplicate. Tags label leads for organization and filtering and are shared with the whole team. Tags are ordered with the most recently created first; each tag reports its name, color (a hex color string), and created_at. Supports limit and offset pagination (default limit 25, max 100). Free to call.

List-Leads

ChatGPT
Use this when the user wants to list leads from their Hunter account, with optional filters on email, name, company, or list. Returns up to 100 leads per page; use offset to paginate. Free to call.

List-Leads-List-Folders

ChatGPT
Use this when the user wants to see the leads-list folders in their Hunter account — and when the account has many leads lists, since grouping lists by folder is how users keep a large workspace navigable (surface the folder structure when suggesting where a list lives). Folders group leads lists and are visible to the whole team. Folders are ordered with the most recently created first; each folder reports its name, color (a hex color string), leads_lists_count (how many lists are filed in it), and created_at. Supports limit and offset pagination (default 20, max 100). Free to call.

List-Leads-Lists

ChatGPT
Use this when the user wants to list the leads lists in their Hunter account, with pagination. Free to call.

List-Message-Templates

ChatGPT
Use this when the user wants to see the saved message templates in their Hunter account, or when the user is drafting a sequence step (an introduction message or a follow-up) — list the templates first and ask whether they want to use a saved template as the starting point. Each template carries a reusable subject, body, and message_format (text or html). To build a follow-up step from one, pass the chosen template's id as message_template_id to Create-Sequence-Follow-Up: the step's subject, body, and format are pre-filled from the template (any subject/body you pass explicitly wins over the template's). Supports limit and offset pagination (default 25 per page, max 100); templates are ordered newest first. Free to call.

List-Saved-Searches

ChatGPT
Use this when the user wants to see the Discover searches they saved earlier — a good opening move at the start of a prospecting conversation ('want to rerun one of your saved searches?'). Each saved search carries its id, name, the stored filters payload, and timestamps, ordered newest first. To rerun one, read its filters and name and describe them to the user as a natural-language query for Find-Companies or Count-Company-Emails — that reformulation is approximate, since these tools take only a query (or exact domains) and cannot re-apply the stored structured filters (locations, industries, funding, technologies, include/exclude lists) verbatim. Supports limit and offset pagination (meta.total is the full count). Free to call.

List-Sequence-Follow-Ups

ChatGPT
Use this when the user wants to see the follow-up steps of a sequence, ordered by step. Step 0 is the introduction message and steps 1 and up are follow-ups; each step reports its wait_days (days to wait before sending), subject (the email subject; an inherited subject is resolved to the prior step's subject, so it is rarely empty), body, message_format (text or html), messages_sent, and variant (null, or A/B for A/B-tested steps). Supports limit and offset pagination. Returns a not-found error if the sequence does not exist or belongs to another team. Free to call.

List-Sequence-Recipients

ChatGPT
Use this when the user wants to list the recipients of a sequence with per-recipient status. Free to call.

List-Sequences

ChatGPT
Use this when the user wants to list the sequences in their Hunter account with name, lifecycle booleans (started/archived/paused), recipient count, and owner, most recent first. Optionally filter by started and/or archived state and paginate with limit/offset. New sequences can be created with Create-Sequence and inspected in full with Get-Sequence. Free to call.

List-Webhooks

ChatGPT
Use this when the user wants to inspect the webhooks configured on their Hunter account — typically to debug an integration: is my webhook configured, which event does it listen to, and where does it deliver? Each webhook reports its id, target_url (the endpoint Hunter POSTs the event payload to), and event — one of lead.created, message.sent, message.read, message.clicked, message.replied, export.completed, import.completed, sequence.paused, or sequence.resumed. Results are ordered newest first and support limit and offset pagination (meta.total carries the overall count). Returns an empty list when no webhooks are configured. Free to call.

Merge-Leads-Lists

ChatGPT
Use this when the user wants to move every lead from a source list into a destination list. The source list is permanently deleted after the move. Leads on the destination list are preserved. Free to call. Merging cannot be undone from the API.

Pause-Sequence

ChatGPT
Use this when the user wants to pause a started sequence so it stops sending outbound emails until it is resumed. Only a started, non-archived sequence can be paused: pausing a draft (not yet started) or an archived sequence returns an invalid_input error (id sequence_not_active). Pausing an already-paused sequence is idempotent and succeeds. The response reports the sequence id and its paused state — surface that the sequence is now paused and that pausing is reversible. Returns a not-found error if the sequence does not exist or belongs to another user (this endpoint is owner-only). Free to call.

Person-Enrichment

ChatGPT
Use this when the user wants to look up a professional contact by email address and see their name, job title, employer, location, phone number, and social profiles. Costs 1 enrichment credit, only charged when data is found. Do not use this for consumer profiles — Hunter's enrichment covers business contacts.

Plan-Prospecting-Flow

ChatGPT
Use this when the user gives a natural-language prospecting brief (e.g. "Find 20 marketing leads at fintech companies in Berlin") and wants a step-by-step plan for finding companies, contacts, verifying emails, and saving leads. Returns the plan plus a first action so the model can execute the chain end to end. Free to call; sub-tools charge their own credits.

Push-Leads-To-CRM

ChatGPT
Use this when the user wants to push Hunter leads into the CRM behind one of their connected apps (lead-syncing providers: HubSpot, Pipedrive, Salesforce, Zapier, and Zoho). First call List-Connected-Apps to find the target app and its id. Select the leads with EITHER lead_ids (specific leads) OR leads_list_id (every lead in that list); when both are provided the list takes precedence. The push is asynchronous: success only means the job was queued (status: "queued" plus the matched leads_count) — tell the user to check their CRM shortly for the synced leads. Returns a not-found error for an unknown connected app or leads list, and an invalid_input error when the app does not support lead syncing or no leads match the selection. Pushing writes lead data into the user's external CRM and requires an explicit user confirmation: the first call returns a confirmation prompt without pushing, and only re-issuing with confirmed: true actually queues the push. Free to call.

Remove-Campaign-Recipients

ChatGPT
Use this when the user wants to remove recipients from a campaign by email address. Pending messages scheduled for the removed recipients are cancelled; messages already sent are not recalled. Free to call.

Remove-Company-From-List

ChatGPT
Use this when the user wants to remove a company from a static company list. Identify the list by company_list_id and the company by company_id. This removes only the membership link between the company and the list; the company itself is not deleted and can be saved back to the list later, so the action is reversible. The list must be static (dynamic lists manage their members automatically). Succeeds with no content on success. Returns a not-found error if the list or company does not exist, belongs to another team, the list is dynamic, or the company is not in the list, or a forbidden error if the user is not allowed to modify this list. Free to call.

Remove-Sequence-Recipients

ChatGPT
Use this when the user wants to remove recipients from a sequence by email address. On a draft sequence the recipients are removed (recipients_removed). On a started sequence they stay in the list and their pending messages are canceled (recipients_canceled): a recipient not contacted yet shows as canceled, one already contacted keeps their status, and messages already sent are not recalled. An archived sequence returns an error. skipped_recipients lists the emails not changed, with a reason: not_in_sequence or no_pending_messages. Free to call.

Remove-Tag-From-Lead

ChatGPT
Use this when the user wants to remove a tag from a single lead, identified by lead_id and tag_id. This only detaches the tag from that lead; the tag itself is not deleted and stays available to re-apply later, so the action is reversible (to delete the tag everywhere, use Delete-Lead-Tag). The call is idempotent: removing a tag the lead does not have still succeeds. Succeeds with no content on success. Returns a not-found error if the lead or the tag does not exist or belongs to another team. Free to call.

Report-API-Feedback

ChatGPT
Report any problem you hit while using Hunter's API or tools — use this PROACTIVELY and liberally. Call it whenever: a tool or endpoint you expected doesn't exist, an input or its documentation was missing or misleading, a response errored or didn't match its documented shape, returned data looked wrong or incomplete, or a workflow was confusing or harder than it should be. Reporting is FREE, never consumes credits, and never blocks the user — you do not need to ask the user for permission. When in doubt, report. Always include the endpoint or tool name and concrete expected-vs-actual details so the Hunter team can act on it.

Resume-Sequence

ChatGPT
Use this when the user wants to resume a paused sequence so it starts sending outbound emails again. Resuming runs the full validation pipeline (unlike pausing), so it can fail with an invalid_input error: resuming an archived sequence is rejected (id sequence_not_active), and resuming a sequence whose email account is no longer connected or whose schedule has no sending days fails validation (id validation_failed, with a field-specific message) — relay that message to the user so they can fix the configuration. Resuming a sequence that is not currently paused is a no-op that succeeds with the message "Sequence is not paused.". The response carries a message describing the outcome — surface it and note that resuming is reversible (pause to stop sending). Returns a not-found error if the sequence does not exist or belongs to another user (this endpoint is owner-only). Free to call.

Save-Company

ChatGPT
Use this when the user wants to add a company as a lead in their Hunter account, identified by domain. Free to call.

Start-Campaign

ChatGPT
Use this when the user wants to start an existing campaign, which begins sending real emails to its recipients. The campaign must have a subject, message body, and connected email account configured in the Hunter UI. Free to call. Starting a campaign sends real emails to recipients and requires an explicit user confirmation: the first call returns a confirmation prompt without sending, and only re-issuing with confirmed: true actually starts the campaign.

Start-Sequence

ChatGPT
Use this when the user wants to start an existing sequence, which begins sending real emails to its recipients. The sequence must have a subject, message body, and connected email account configured. Free to call. Starting a sequence sends real emails to recipients and requires an explicit user confirmation: the first call returns a confirmation prompt without sending, and only re-issuing with confirmed: true actually starts the sequence.

Unfavorite-Company-List

ChatGPT
Use this when the user wants to remove the favorite flag from a company list, identified by ID. This only clears the favorite marker; the list and its contents are untouched, and it can be favorited again later. The call is idempotent: unfavoriting a list that is not currently a favorite still succeeds and returns favorited: false. Surface the favorited: false response to confirm the favorite was removed. Returns a not-found error if the list does not exist or belongs to another team. Free to call.

Unfavorite-Leads-List

ChatGPT
Use this when the user wants to remove the favorite flag from a leads list, identified by ID. This only clears the current user's personal favorite marker; the list and its contents are untouched, and it can be favorited again later. The call is idempotent: unfavoriting a list that is not currently a favorite still succeeds and returns favorited: false. Surface the favorited: false response to confirm the favorite was removed. Returns a not-found error if the list does not exist or belongs to another team. Free to call.

Update-Company-List

ChatGPT
Use this when the user wants to update a company list, identified by ID. You can rename it (name), move it to a different folder (company_list_folder_id), and — for a dynamic list — change its filters. Renaming overwrites the previous name, which cannot be recovered from the API; if the user declines the rename, offer to create a new company list with the desired name instead. Succeeds with no content on success. Returns a not-found error if the list does not exist or belongs to another team, or an invalid_input error (id validation_failed) if the new name is empty or the filters are invalid. Free to call.

Update-Company-List-Folder

ChatGPT
Use this when the user wants to update a company-list folder, identified by ID. You can rename it (name) and change its color. color must be one of the allowed Hunter folder colors (hex without a leading '#'): 374151, 3489F9, 10B981, F5BA0B, EF4444, 7C3AED, F97316, E5E7EB, B4D9F7, BAE6B0, FDE68A, FBD0D0, D4C4F8, FFD79B. Renaming overwrites the previous name, which cannot be recovered from the API; if the user declines the rename, offer to create a new folder with the desired name instead. Succeeds with no content on success. Only the folder's owner, a team admin, or the team owner may update it. Returns a not-found error if the folder does not exist, a forbidden error if the user is not allowed to update it, or an invalid_input error (id validation_failed) if the new name is duplicated or the color is not one of the allowed values. Free to call.

Update-Custom-Attribute

ChatGPT
Use this when the user wants to rename an existing custom-attribute definition, identified by ID. Overwrites the existing label; the previous label cannot be recovered from the API. If the user declines the rename, offer to instead create a new custom-attribute definition with the desired label. Free to call.

Update-Lead

ChatGPT
Use this when the user wants to update fields on an existing lead identified by ID. Free to call. Updating a lead overwrites the supplied fields in place.

Update-Lead-Tag

ChatGPT
Use this when the user wants to rename a lead tag or change its color, identified by ID. Renaming overwrites the previous name everywhere the tag is applied, and the old name cannot be recovered from the API; if the user declines the rename, offer to create a new tag with the desired name instead. color must be one of the allowed Hunter tag colors (hex without a leading '#'): 374151, 3489F9, 10B981, F5BA0B, EF4444, 7C3AED, F97316, E5E7EB, B4D9F7, BAE6B0, FDE68A, FBD0D0, D4C4F8, FFD79B. Returns the updated tag. Only the tag's owner, a team admin, or the team owner may update it. Returns a not-found error if the tag does not exist or belongs to another team, a forbidden error if the user is not allowed to update it, or an invalid_input error (id validation_failed) if the new name is empty, too long, or duplicated, or the color is not one of the allowed values. Free to call.

Update-Leads-List

ChatGPT
Use this when the user wants to rename an existing leads list, identified by ID. Overwrites the existing list name; the previous name cannot be recovered from the API. If the user declines the rename, offer to instead create a new leads list with the desired name. Free to call.

Update-Leads-List-Folder

ChatGPT
Use this when the user wants to update a leads-list folder, identified by ID. You can rename it (name) and change its color. color must be one of the allowed Hunter folder colors (hex without a leading '#'): 374151, 3489F9, 10B981, F5BA0B, EF4444, 7C3AED, F97316, E5E7EB, B4D9F7, BAE6B0, FDE68A, FBD0D0, D4C4F8, FFD79B. Renaming overwrites the previous name, which cannot be recovered from the API; if the user declines the rename, offer to create a new folder with the desired name instead. Succeeds with no content on success. Only the folder's owner, a team admin, or the team owner may update it. Returns a not-found error if the folder does not exist, a forbidden error if the user is not allowed to update it, or an invalid_input error (id validation_failed) if the new name is duplicated or the color is not one of the allowed values. Free to call.

Update-Message-Template

ChatGPT
Use this when the user wants to edit a saved message template's name, subject, body, or message format. Only the fields provided are changed; the previous values are overwritten and cannot be recovered from the API. Sequence steps already created from this template keep their own copy of the subject and body, so updating the template does not change any existing sequence. Returns a not-found error if the template does not exist or belongs to another team. Free to call.

Update-Sequence

ChatGPT
Use this when the user wants to modify an existing sequence's name, schedule, senders, or settings; omitted fields are left unchanged. On a draft every field is editable. Once the sequence has STARTED or been ARCHIVED, the schedule and sender fields are locked: changing schedule_time_start, schedule_time_end, schedule_days, start_at, email_account_ids, bcc_recipient, tracked, or tracked_links is rejected with an invalid_input error (id sequence_locked) — only name and add_unsubscribe_link (a compliance lever) stay editable, and re-sending an unchanged value is tolerated. Other validation failures return field-specific errors (unknown_email_account_ids, invalid_schedule_days, invalid_schedule_window, start_at_in_the_past, tracked_links_requires_premium, ...). Returns the updated sequence. Returns a not-found error if the sequence does not exist or belongs to another team. Free to call.

Update-Sequence-Follow-Up

ChatGPT
Use this when the user wants to change the wording, timing, or format of an existing sequence step, or to write the introduction email. This is the only tool that can author the introduction email (step 0). Create-Sequence makes step 0 with an empty subject and body; fetch its id with List-Sequence-Follow-Ups, then set subject and body here — with a sending account already connected, that leaves nothing to do in the Hunter dashboard. Omitted fields are left unchanged on the step you target, with two documented side effects to relay to the user. First, changing a subject also rewrites the subject of every LATER step that still holds the old value verbatim (Hunter propagates a subject edit down the chain), and on a started sequence that regenerates the pending messages of the affected steps. This includes the ordinary build order: steps appended with no subject of their own are stored empty, so authoring step 0 afterwards propagates into every one of them. ALWAYS re-read the step list with List-Sequence-Follow-Ups after a subject change and tell the user which other steps moved. Second, setting message_format to text on a step that is currently html makes Hunter CONVERT the stored body even if you omit body: images are dropped, links collapse to bare URLs, and most HTML is stripped. That conversion is not reversible by setting the format back, so confirm it first, and show the user the converted body that comes back in the response. Editing is allowed on a draft or a paused sequence and is rejected with an invalid_input error while the sequence is actively sending (id sequence_active — pause it first), while it is scheduled to start (id sequence_planned), or once it is archived. wait_days accepts 0-999. Send 0 or omit it for step 0: the introduction always goes out first so the delay never delays anything, but a non-zero value still persists and inflates the delivery-time estimate Hunter shows for the sequence. CRITICAL — only pass subject when you are deliberately rewriting the subject line: never echo back a subject you just read from List-Sequence-Follow-Ups or Get-Sequence-Follow-Up while editing the body or the timing. On a step that inherits its subject from an earlier step, writing the value you read (the resolved text from the list, or the raw internal placeholder from the detail view) replaces the inheritance link with a fixed string and silently breaks subject threading for A/B recipients. Omit subject to keep inheriting. body must be non-blank when given. An empty-string subject is meaningful instead of invalid: on any step above 0 it RESTORES inheritance from the previous step, which is the only way to undo a concrete subject and re-thread the step. Never send an empty subject for step 0 — it has no previous step to inherit from, so it just clears the introduction subject and blocks Start-Sequence. Both fields are capped at 250 and 50000 characters respectively, because Hunter accepts a longer write and only rejects it at Start-Sequence. Note that Hunter normalizes a saved body even when you omit body: smart quotes are straightened and malformed links repaired. Merge fields must carry a fallback in the form {{first_name:"there"}}; a bare {{first_name}} or a pipe form like {{first_name|there}} is rejected or renders empty. Step 0 is created with message_format html, so send HTML in body or set message_format to text alongside a plain-text body. If the step you target has a non-null variant (an A/B test — visible in List-Sequence-Follow-Ups), this edits ONLY that arm; tell the user which arm changed. Requires that you own the sequence or are a team admin/owner. Returns the updated step. Returns a not-found error if the sequence or the step does not exist or belongs to another team. Free to call.

Update-Webhook

ChatGPT
Use this when the user wants to re-point an existing webhook to a different target_url (the endpoint Hunter POSTs to) and/or subscribe it to a different event (one of lead.created, message.sent, message.read, message.clicked, message.replied, export.completed, import.completed, sequence.paused, or sequence.resumed). This OVERWRITES configuration another system may already rely on: an integration listening on the old URL or event stops receiving deliveries immediately, so review the webhook with List-Webhooks first and make sure the user really wants to change it. Provide at least one of target_url or event — a call with neither returns an invalid_input error without contacting the API. Returns the updated webhook. Fails with an invalid_input error when the new target_url is not a valid 12-500 character HTTP(S) URL or the event is not supported, and a not-found error if the webhook does not exist or is not visible to the account. Free to call.

Capabilities

InteractiveWrites

Example Prompts

Click any prompt to copy it.

App Stats

103

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily