MCP App Store
by KeenEthics

Overview

Apollo is a B2B sales intelligence and sales engagement platform connected to Claude. Search Apollo's database for people by title, seniority, location, and time in role, and for companies by industry, size, technology stack, funding, hiring, and headcount growth. Find companies using a specific technology and the senior people who work there. Surface hiring, funding, and headcount-growth signals from company data and job postings, then save people as contacts and companies as accounts and organize them in lists. Enrich people with work emails and, where available, phone numbers. Revealing phone numbers uses additional credits. Enrich companies using their website domains to find industry, headcount, revenue, and funding details, one at a time or in batches. Keep your pipeline moving: create and search deals, log phone calls, and manage tasks. Draft personalized, multi-step email sequences and create them in Apollo for your review. Add contacts to existing sequences with your confirmation, and track sent emails, opens, and replies by sequence.

Tools

apollo_accounts_bulk_create

ChatGPT
Create many accounts (companies) in a single call. Pass an array of account objects under accounts. No deduplication is applied: each object becomes a new record even if it matches an existing account by name or domain. Use the single Create an Account endpoint when adding only one account; use Update an Account to modify an existing account. Once created, accounts are not removed by subsequent calls — review the array before sending. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_accounts_create

ChatGPT
Use the Create an Account endpoint to add a new account to your team's Apollo account. In Apollo terminology, an account is a company that your team has explicitly added to your database. Apollo does not apply deduplication processes when you create a new account via the API. If your entry has the same name, domain, or other details as an existing account, Apollo will create a new account instead of updating the existing account. To update an existing account, use the Update an Account endpoint instead.

apollo_accounts_update

ChatGPT
Use the Update an Account endpoint to update existing accounts in your team's Apollo account. In Apollo terminology, an account is a company that your team has explicitly added to your database. To create a new account, use the Create an Account endpoint instead.

apollo_analytics_sync_report

ChatGPT
Query Apollo's sales analytics data with flexible filtering, grouping, and aggregation. Supports metrics across emails, calls, meetings, tasks, opportunities, and conversation intelligence. Break down by 55+ dimensions including time, user, contact stage, account details, and more.

apollo_contacts_bulk_create

ChatGPT
Create many contacts in a single call. Pass an array of contact objects under contacts. No deduplication is applied: each object becomes a new record even if it matches an existing contact by name or email. Use the single Create Contact endpoint when adding only one contact; use Update Contact to modify an existing contact. Once created, contacts are not removed by subsequent calls — review the array before sending. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_contacts_create

ChatGPT
Create a new contact in Apollo. By default, Apollo does not apply deduplication. If an entry has the same name, email, or other details as an existing contact, a new contact is created. Set run_dedupe to true to prevent duplicates.

apollo_contacts_update

ChatGPT
Update an existing contact in your team's Apollo account. In Apollo terminology, a contact is a person that your team has explicitly added to your database. A contact will have their data enriched in some way, such as accessing an email address or a phone number. To create a new contact, use the Create a Contact endpoint instead.

apollo_context_center_create_product

ChatGPT
Add a product (or service) to the team's Context Center. Products describe specific offerings Apollo can reference when generating outreach. Each call creates a NEW product record — calling twice creates two products. To change an existing product, do not call this again; read it first with apollo_context_center_show_product and confirm with the user. BEFORE calling: confirm the product name and description with the user. Only product_or_service_name is required. AFTER calling: echo only the product id and name back to the user. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_context_center_create_profile

ChatGPT
Create the team's Context Center Ideal Customer Profile (ICP). The ICP is the single team-wide profile Apollo uses to personalize AI-generated outreach: who the team sells to, the company's value proposition, the pain points it solves, and its proof points. A Context Center has two parts: this ICP (one per team) and a set of product profiles (managed separately via apollo_context_center_create_product / apollo_context_center_update_product). This tool sets only the ICP. Use this when the team is setting up its Context Center. To edit an existing profile, use the Update tool (apollo_context_center_update_profile) instead. BEFORE calling: confirm the field values with the user — do not invent company positioning, value props, or competitors. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_context_center_show

ChatGPT
Fetch the team's full Context Center — the Ideal Customer Profile (ICP) and all product profiles Apollo uses to personalize AI-generated messaging. Returns the team's current Context Center, including drafts that have not yet been approved. ALWAYS call this first before editing the profile or a product, so you read the current values and send only what changes. Returns 404 if the team has no Context Center yet (in that case use apollo_context_center_create_profile to set one up). If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_context_center_show_product

ChatGPT
Fetch a single product from the team's Context Center by its Apollo id. Use this to read a product's current details before editing or referencing it in messaging. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_context_center_update_product

ChatGPT
Update an existing product in the team's Context Center. Each field you send REPLACES the prior value of that field; fields you omit are left unchanged. BEFORE calling: read the product first (apollo_context_center_show_product or apollo_context_center_show) and confirm the new values with the user. AFTER calling: echo only the product id and a short summary of what changed back to the user. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_context_center_update_profile

ChatGPT
Update fields on the team's EXISTING Context Center Ideal Customer Profile (ICP). Each field you send REPLACES the prior value of that field; fields you omit are left unchanged. This requires a Context Center to already exist. If the team has no Context Center yet, use apollo_context_center_create_profile instead (it auto-creates one). This is the team's shared profile — an edit changes it for everyone on the team and overwrites prior content, so it is not reversible. BEFORE calling: read the current profile with apollo_context_center_show, confirm the new values with the user, and send only the fields you intend to change. Get explicit user confirmation before writing. AFTER calling: echo only the profile id and a short summary of which fields changed back to the user — do not paste the full payload. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_conversations_get_insights

ChatGPT
Retrieve AI-generated insights for a single conversation. The end user will not provide a conversation id directly. Call Search Conversations (apollo_conversations_search) first to find candidates, then pass the id from that search result. If multiple conversations match, present topic and start_time and ask the user to confirm which one before calling this tool. When exactly one conversation clearly matches, proceed without extra confirmation. Only available once insights have been fully processed (state=insights_generated). Returns four sections: - summary: plaintext overview including outcome, pricing discussion, next steps, objections, and pain points - action_items: timestamped items identified during the conversation, with speaker attribution - questions: questions raised during the call, with speaker and timestamp - tracker_insights: topic tracker hits (e.g. competitor mentions, pricing triggers), with timestamp and spoken sentence Also returns account_ids and opportunity_ids: the Apollo account and deal (opportunity) IDs linked to the conversation, empty lists when none. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_conversations_get_transcript

ChatGPT
Retrieve the transcript for a single conversation. The end user will not provide a conversation id directly. Call Search Conversations (apollo_conversations_search) first to find candidates, then pass the id from that search result. If multiple conversations match, present topic and start_time and ask the user to confirm which one before calling this tool. When exactly one conversation clearly matches, proceed without extra confirmation. Returns conversation metadata (including account_ids and opportunity_ids, the linked Apollo account and deal IDs, empty lists when none) plus the transcript in the requested format. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_csv_exports_export_view

ChatGPT
Export every row of a record collection (sheet) to a downloadable CSV. The CSV includes all of the collection's columns, including enriched values. Use this after importing and enriching a collection to hand the results back to the user as a file. The export runs asynchronously and returns an export_id; poll apollo_csv_exports_show with that id until status is completed, then surface the url to the user. Requires CSV export access (the can_export_csv product feature) and export credit — if either is missing the call returns an error the caller should report rather than retry. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_csv_exports_show

ChatGPT
Get the status of a CSV export started with apollo_csv_exports_export_view. Returns status (queued, processing, completed, or failed), progress_percent, row_count, download_available, failure_reason, and — once status is completed — a url to download the file. Poll this until status is terminal (completed/failed). If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_custom_objects_create

ChatGPT
Create a named, isolated workspace for running a custom data workflow — importing records, enriching them with specific fields, and exporting the results — outside of Apollo's standard Contacts and Accounts model. Use this for builder/GTM-engineer workflows where data needs to live in its own isolated table with custom columns: enriching a bespoke set of companies before an outbound campaign, building a research table for analyst work, or managing records that don't fit the standard person/company model (e.g. job openings, events, deals). Do NOT use this if the user simply wants to import contacts, build a prospect list, or manage existing leads — apollo_contacts_ and apollo_lists_ are the right tools for those cases. For "research/find X per record, with a citation, for N records" requests where N is large (tens to thousands) and the records are NOT already an existing contacts/accounts list, this is the right starting point — not apollo_agent_research_and_analyze, which operates on an existing contacts/accounts list, not a brand-new dataset built from scratch. The chain is: create the collection here, populate it (this tool's records param, or apollo_data_sources_create + apollo_data_source_imports_create), add an AI research column with apollo_fields_create (computed_type 'prompt_execution', with meta.template.parameters web_search_enabled and return_citations set), then run it with apollo_dynamic_field_enrichment_enrich. Only name is required. Once created, attach a data source to populate rows, add fields to define what to enrich, then run enrichment. The collection is visible in the Apollo UI. See records below if you need a precise, known row count instead of a data source/import. After creation, the response includes id (the collection ID) and a project_workspace_artifact.project_workspace_id (or studio_artifact.studio_id for studio workspaces). Use these to construct a direct link for the user: - Project workspace: https://app.apollo.io/#/projects/{project_workspace_id}/ai-sheets/{id} - Studio: https://app.apollo.io/#/builder/{studio_id}/sheet/{id} Always surface this link so the user can open their new collection immediately. No deduplication is applied — calling this twice creates two separate collections with the same name. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_custom_objects_show

ChatGPT
Get the current state of a record collection — record count, field definitions, data sources, and status distribution. Use this after triggering an import (via apollo_data_source_imports_create) to confirm records have loaded (total_record_count will be > 0). Also useful to retrieve the list of field IDs before running enrichment or searching records. Returns status_distribution (a map of field ID → value distribution) and total_record_count. Note: these counters are eventually consistent — they may temporarily be negative or inflated while background reconciliation runs. This is normal and autocorrects; do not treat a momentarily negative count as an error. status_distribution is the more reliable way to check progress of a bulk/run_all enrichment on this collection. apollo_dynamic_field_enrichment_ongoing_enrichment_requests scopes its query to the requesting user and to requests already persisted for the given field_ids — it can return an empty list shortly after triggering run_all (request creation happens asynchronously in a background worker, so there's a brief window with nothing to find yet) or if queried from a different user/session context than the one that triggered the run. If it keeps returning empty while status_distribution shows records still in progress, treat status_distribution as the source of truth for whether enrichment is still running. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_deals_create

ChatGPT
Create a new deal (opportunity) in Apollo. A deal represents a potential sale tied to an account, with stage, amount, and close date. Only name is required; other fields are commonly set at creation time and can be left blank to take Apollo defaults. If the team has a connected CRM (Salesforce, HubSpot, etc.), the new deal is pushed to the CRM as part of creation. BEFORE calling this tool: 1. DEDUP — call apollo_deals_search to check for existing deals matching the same name (and account_id if known). If any are found, present them to the user and ask whether to proceed or skip. Do not create if the user says skip. 2. Wait for explicit user confirmation before calling this endpoint. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_deals_show

ChatGPT
Retrieve a single deal (opportunity) by its Apollo ID, including full details (stage, amount, close date, owner, account, contact roles). Use Search Deals first if you do not already have the opportunity_id. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_domain_purchase_index

ChatGPT
List the domains the team has purchased through Apollo. Returns each domain's id, domain name, status, billing period, SPF/DKIM/DMARC diagnostics, and any mailboxes already provisioned on it. Call this to obtain a domain_purchase_id before purchasing a mailbox — a mailbox can only be provisioned on a domain the team already owns, and the mailbox email's domain must match the domain returned here. Never guess a domain_purchase_id; use only ids returned by this tool. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_dynamic_field_enrichment_ongoing_enrichment_requests

ChatGPT
Poll the status of in-progress or recently completed enrichment runs for specific fields. Call this after apollo_dynamic_field_enrichment_enrich to check whether enrichment for each field has completed, is still pending, or has failed. Returns per-field status with created_at, updated_at, and failure_reason if applicable. Status values: pending, completed, failed. Pass the same field_ids you passed to enrich. Poll until all fields reach completed or failed before calling apollo_custom_object_records_search to export results. See field_ids below for a known gap when polling right after a run_all. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_email_account_purchase_create

ChatGPT
Purchase one or more Apollo-provisioned outbound mailboxes against a domain the team already owns. THIS CONSUMES CREDITS and provisions real mailboxes — it is irreversible from this tool. No deduplication is applied — Apollo does not pre-check that the mailbox address is free; provisioning will fail if it is already in use. The mailbox is automatically owned by the authenticated user — do NOT ask for or look up any user/owner id, and do not call other tools to resolve one. CREDIT COST: Charged per mailbox, by mailbox type, when the mailbox is provisioned. Cost per mailbox (in unified credits): shared = 300, google = 800, outlook = 1500. Total cost = (cost per mailbox for the chosen type) × (number of mailboxes). All mailboxes in one request must share the same mailbox_type, so the total is always count × the per-type cost above. (Teams on legacy export credits are charged ~1/5 of these amounts; if unsure which applies, state the unified-credit number and note it may be lower on legacy plans.) MANDATORY CONFIRMATION — You MUST say this EXACT message to the user before calling this endpoint, filling in the real numbers: "Purchasing [N] [mailbox_type] mailbox(es) will consume [N × per-type cost] credits. Do you want to proceed?" Do NOT paraphrase. Do NOT say "consumes credits" — state the exact credit total number. Do NOT proactively show the remaining credit balance; only show it if the user asks. Do NOT call this endpoint without explicit user approval. Provisioning is asynchronous: newly created mailboxes start in status_cd "pending_setup" and become "active" once ready. The endpoint will reject the purchase if the team has insufficient credits. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_email_account_purchase_index

ChatGPT
List the team's Apollo-provisioned (purchased) mailboxes. Returns each mailbox's id, email, mailbox type (type_cd), provisioning status (status_cd: pending_setup | active | inactive), assigned user, forwarding email, and billing period. Use this to check the status of a purchased mailbox, or to see what mailboxes the team already owns. This lists PURCHASED mailboxes only — not mailboxes connected via OAuth (use the email accounts list for those). Optionally filter by domain_purchase_id to see mailboxes on one purchased domain. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_email_accounts_index

ChatGPT
Use the Get a List of Email Accounts endpoint to retrieve information about the linked email inboxes that your teammates use in your Apollo account. In particular, this endpoint returns IDs for each of your team's linked email accounts, which can be used with the Add Contacts to a Sequence endpoint. Always call this endpoint before adding contacts to a sequence. Never guess or fabricate email account IDs — use only IDs returned by this endpoint. If the user's intended sender is ambiguous (e.g., multiple team members share a first name), present all matching email accounts to the user and ask them to select the correct one before proceeding.

apollo_email_domain_diagnosis_authentication_status

ChatGPT
Report the email-authentication health (SPF, DKIM, and DMARC) of the sending domains behind the team's active mailboxes. Use this to answer "are my mailboxes/domains set up to send?", "is my SPF/DKIM/DMARC configured correctly?", or to diagnose why a domain's email may be landing in spam. Results are keyed by domain, then by email sending policy (default | sendgrid | mailgun). For each you get the raw DNS records — spf_values, dmarc_values, dkim_host, dkim_signature — plus an "analysis" object giving a per-check verdict (spf / dkim / dmarc), each one of: good | warning | error | pending. Also included: status_cd (diagnosis lifecycle), domain_created_on (domain age), and timestamps (email_sent_at, email_received_at, authentication_status_updated_at, healthy_since, fix_succeeded_at) for freshness and remediation tracking. IMPORTANT — this is not exhaustive: the endpoint returns at most 10 domains, prioritizing domains that currently have SPF/DKIM/DMARC issues and backfilling with the most-recently-checked domains. Do NOT claim "all domains are healthy" from this response alone; only report on the domains actually returned. To inspect one specific domain, pass the domain filter. This reports authentication status only. It does not run a new diagnosis, does not fix records, and does not cover blacklist or inbox-placement results. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_email_validation_validate

ChatGPT
Check whether a single email address is deliverable. PREREQUISITE: the check is ASYNC and the verdict can ONLY be read by polling apollo_webhook_result_show. If that tool is not available to you, do NOT start the check: it would spend a credit on a result you cannot retrieve. Tell the user to reconnect Apollo first. ASYNC FLOW: this response carries no verdict, only a request_id and one entry per submitted address with its own status and errors. A rejected entry was never checked and costs nothing. For an accepted entry, wait ~10 seconds, then call apollo_webhook_result_show with the top-level request_id and follow the polling guidance in that tool. Use this when the user supplies an email address and wants to know whether it is real and deliverable. Do NOT use it to find an address for a person — that is apollo_people_match with run_waterfall_email. Each result carries validation_status: "validated" when the vendor confirmed the mailbox accepts mail, "not_validated" otherwise. "not_validated" does NOT mean the address is known bad, it also covers a catch-all domain and a vendor that could not reach a verdict. Say the check did not confirm the address rather than calling it invalid. The result also names the validator that answered. ERRORS: a response carrying error is a failure, not a verdict. Do NOT retry an access or plan error, just tell the user what it says. CREDIT COST: Exactly 1 lead credit per address, charged whichever way the check comes back. A repeat check within the caching window is served from the stored result and is still charged. Credits spent cannot be undone. MANDATORY CONFIRMATION — You MUST say the EXACT message below and wait for the user to agree before calling this endpoint. Do NOT paraphrase. Single address: "Checking [email] will use 1 credit. Do you want to proceed?" Several addresses, confirmed once as a set rather than per address: "Checking [N] addresses will use [N] credits, 1 per address. Do you want to proceed?" Do NOT call this endpoint without explicit user approval. Approval covers only what was just confirmed — ask again for any later address, including a re-check of one already done. CREDIT TRANSPARENCY (mcp_credits): a settled result may carry an mcp_credits block with spent, balance_before and balance_after. spent reads as pending here and carries the real amount once the poll settles. When present, ALWAYS report it unprompted, e.g. "This check used [spent.credits] credits. You now have [balance_after] credits available." If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_emailer_campaigns_activity_feed

ChatGPT
Return a single contact's sequence enrollment/engagement timeline — the same enrollment activity a user sees on the contact's Apollo timeline — as a time-ordered list of events: enrolled, paused (with reason where available), resumed, failed, completed/removed, and replied. Each event includes the event type, when it happened, and the sequence (and step) it relates to. Use this to answer "what happened with this contact in the sequence over time" — after finding the contact via apollo_contacts_search. Pass sequence_id to narrow the feed to one sequence. This is per-contact history; for a sequence's per-email metrics use apollo_emailer_messages_search. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_emailer_campaigns_add_contact_ids

ChatGPT
Use the Add Contacts to a Sequence endpoint to add contacts to existing sequences in your team's Apollo account. This action sends real emails from a real person's mailbox and is irreversible once emails are dispatched. Before calling this endpoint, follow these steps in order: 1. Call the Search for Sequences endpoint to find the target sequence by name. If multiple sequences match, present all matches to the user and ask them to confirm which sequence they intend. Do not assume. 2. Call the Get a List of Email Accounts endpoint to retrieve valid sender email account IDs. Never guess or fabricate a send_email_from_email_account_id — always use an ID returned by Get a List of Email Accounts. If the user's request is ambiguous (e.g., "Sarah's account" matches multiple email accounts), list all matching options and ask the user to choose. 3. Present the user with a confirmation summary that includes: the sender email address, the sequence name, the number of contacts to be added, and the enrollment status (active or paused). Wait for the user to explicitly confirm before proceeding. Do not enroll contacts without explicit user approval, even if the user says "just do it" — always show the summary first. 4. Only after the user explicitly confirms, call this endpoint to enroll the contacts. In Apollo terminology, a contact is a person that your team has explicitly added to your database. Only contacts can be added to sequences. To enrich a person's data, call the People Enrichment endpoint. Then, to add the person as a contact in your database, call the Create a Contact endpoint.

apollo_emailer_campaigns_approve

ChatGPT
Activate (turn on) an existing sequence so that contacts enrolled in it begin receiving emails and tasks. This is the toggle that flips active=false to active=true. THIS ACTION HAS REAL-WORLD CONSEQUENCES. Once active, Apollo will start sending emails from the user's mailbox on the configured schedule. Activation is irreversible for emails already dispatched. BEFORE calling this tool you MUST: 1. Confirm the user has reviewed the sequence's steps and message bodies (e.g. by surfacing a step-by-step summary). 2. Confirm the user has selected a sender email account (apollo_email_accounts_index) and added contacts (apollo_emailer_campaigns_add_contact_ids), if relevant. 3. Get explicit user confirmation in the same turn — do not assume prior consent. The sequence must have at least one step. The team must not have hit its sequence limit. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_emailer_campaigns_remove_or_stop_contact_ids

ChatGPT
Use the Remove or Stop Contacts from one or more existing sequences in your Apollo Account

apollo_emailer_campaigns_show

ChatGPT
Fetch a single sequence's full step-by-step detail: its ordered steps and, for each step, its touches (emailer_touches) and the email template content (subject and body). This is the same step/touch/email content the sequence page shows in the Apollo UI. Use it for two things: 1. Inspect what a sequence sends — "show me the emails/steps in this sequence". 2. Get the ids required to EDIT a sequence. Call this before apollo_sequences_update to obtain each step's id, each touch's id, each template's id, the step positions, and the sequence's current active value — all of which that tool's declarative-diff update needs to change, add, or remove specific steps/touches on an existing sequence. Find the sequence id first via apollo_emailer_campaigns_search. The response is large; when answering the user, summarize the steps and email content rather than pasting the full payload. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_emailer_campaigns_step_content

ChatGPT
Look up the StepContactContent override rows written for one or more contacts in a sequence — i.e. what personalized subject/body (if any) is currently scheduled to send instead of the template, per apollo_emailer_campaigns_add_contact_ids' step_content_overrides. A contact/step pair with no row here will send the sequence's normal template content. Find the sequence id first via apollo_emailer_campaigns_search. Use this tool after enrolling contacts with step_content_overrides to confirm what was recorded. Rows shown here change only when a contact is enrolled — adding a contact who is already in the sequence leaves them as they are. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_emailer_messages_create

ChatGPT
Creates a draft email message for a contact. The draft is saved but NOT sent until you call apollo_emailer_messages_send_now. BEFORE calling this tool: 1. Call apollo_email_accounts_index to get the user's mailboxes. Note the id of the mailbox where default: true — you will need it for send_now. If the user explicitly names a different mailbox, note that id instead. 2. Present a confirmation summary to the user: - From: <mailbox email> (default mailbox) - To: <contact email> - Subject: "<subject line>" - Body preview (first 100 chars) Wait for explicit user confirmation before creating the draft. AFTER creating: - The response includes the emailer_message id. - Call apollo_emailer_messages_send_now with that id and the chosen email_account_id to schedule delivery. If the user has already confirmed everything and just wants the email sent in one step, do not pause again: call this tool to create the draft, then immediately call apollo_emailer_messages_send_now with the returned emailer_message id and the chosen mailbox. From the user's perspective this is a single "send now" action. The recipient defaults to the contact's email. You may optionally set or override the recipients (including non-contact addresses) by passing a recipients array, where each entry has an email and a recipient_type_cd of "to", "cc", or "bcc". Overriding recipients changes who receives the email but not the contact it is associated with. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_emailer_messages_email_send_status

ChatGPT
Check the delivery status of an email after calling apollo_emailer_messages_send_now. Pass the emailer_message id from the send_now response. If status is "scheduled" or "drafted", the email is still being processed. Wait 10-20 seconds and poll again. Typical delivery completes within 5-30 seconds. Give up after 4 polling attempts (~40-60 seconds) and tell the user the email is queued — they can check Apollo later. Terminal statuses: - "completed" — email was delivered successfully. - "failed" — email failed to send. The response includes not_sent_reason and failure_reason with details (e.g. bounce, quota exceeded, spam block). If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_emailer_messages_get_content

ChatGPT
Fetch the content of one or more SENT emails by id — subject, body (plain text or raw HTML), recipients, sent time, and status. Pass an ids array (e.g. ids returned by apollo_emailer_messages_search) to read a batch in a single call — for example every sent email in a sequence — instead of calling this once per email. Use this after listing or drilling into a sequence's emails with apollo_emailer_messages_search, when you need to see what was actually written (e.g. which messaging drove a reply or an open). Returns the team's own sent emails only: customer replies, inbound messages, and drafts are not accessible and are omitted from results. Set body_format to "html" when the raw HTML body matters (links, structure); it defaults to plain text. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_emailer_messages_send_now

ChatGPT
Schedules a drafted email for immediate delivery. The email is sent asynchronously — it enters Apollo's sending queue which respects mailbox rate limits and warmup schedules. The send_from parameter sets which mailbox sends the email. You MUST provide it with the email_account_id and the email address from apollo_email_accounts_index. Use the mailbox where default: true unless the user explicitly requests a different one. The response includes the email's current status (typically "scheduled"). Delivery usually completes within 5-30 seconds. The email status will transition to "active" (delivered) or "failed" (with a reason) asynchronously. THIS ACTION SENDS A REAL EMAIL from a real person's mailbox. Never call this without explicit user confirmation of the recipient, subject, and body. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_emailer_schedules_index

ChatGPT
List all sending schedules available in the user's team. A schedule defines the time windows (days of week, hours of day, time zone) during which Apollo will send emails for a sequence. Use this tool when the user wants to pick a non-default schedule for a new sequence (apollo_sequences_create accepts emailer_schedule_id). If the user does not specify a schedule preference, omit emailer_schedule_id when creating the sequence and Apollo will use the user's default. Returns an array of schedules, each with id, name, default flag, time_zone, and the per-day windows. Echo only id and name back to the user when presenting choices. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_feedback_log

ChatGPT
Call this tool to report when a previous Apollo tool returned an unexpected, empty, or unhelpful result — for example, when a search returned no results despite valid inputs, a record was not found when it should exist, or a tool response was ambiguous or unclear. Include the name of the tool that failed and a clear description of what went wrong. Do NOT call this for successful tool results or expected empty states (e.g. a deliberate empty search).

apollo_fields_index

ChatGPT
List your team's fields so you can set them on accounts or contacts. Use this BEFORE calling the Create/Update/Bulk Create tools for accounts or contacts whenever you need to set a custom field. Each field is returned with its id, label, type, modality ('account', 'contact', etc.), source, and — for picklist/multipicklist fields — its allowed values. Narrow the results with the filters below; always pass modality matching the record you are working with so you only get back relevant fields: - modality: restrict to one record type ('contact', 'account', 'opportunity', ...). - source: 'custom' returns fields your team created (the default, and what you almost always want when setting custom values); 'system' returns Apollo's built-in standard fields (name, email, title, etc.). CRM mapping is NOT a source — every returned field carries its CRM mapping separately. - limit: cap the number of fields returned. Pass a field's id exactly as returned as the key in the typed_custom_fields object on the create/update tools, e.g. typed_custom_fields: { "<id>": "<value>" }. For picklist fields, send one of the allowed value names; for multipicklist fields, send an array. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_labels_add_entity_ids_to_label_names

ChatGPT
Add one or more contacts or accounts to one or more Apollo lists. Identify the records by their Apollo ids (entity_ids) and the lists by name (label_names). The modality must match the kind of records and lists — use "contacts" when adding contacts and "accounts" when adding accounts. If a supplied list name does not exist yet for that modality it is created automatically, so this tool can both create-and-populate a list in a single call. Get contact ids from apollo_contacts_search and account ids from apollo_accounts_search. Adding a record that is already on a list is a no-op (no duplicates are created). If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_labels_create

ChatGPT
Create a new, empty Apollo list (label) for your team. In Apollo terminology, a list is a named, saved group of records. Supply the modality to choose whether this is a list of contacts or a list of accounts. List names must be unique per modality within your team; creating a list whose name already exists for that modality returns an error. To rename an existing list, use Update List (apollo_labels_update). To add records to a list use Add Records to Lists (apollo_labels_add_entity_ids_to_label_names) — that tool will also create the list on the fly if the supplied name does not yet exist. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_labels_index

ChatGPT
List the Apollo lists (also called labels) that belong to your team. In Apollo terminology, a list is a named, saved group of records — most commonly a list of contacts or a list of accounts. Each returned list includes its id, name, modality (e.g. "contacts" or "accounts") and cached record count. Call this first to discover existing lists and their ids before updating a list (apollo_labels_update) or adding/removing records (apollo_labels_add_entity_ids_to_label_names, apollo_labels_remove_entity_ids_from_label_names). If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_labels_remove_entity_ids_from_label_names

ChatGPT
Remove one or more contacts or accounts from one or more Apollo lists. Identify the records by their Apollo ids (entity_ids) and the lists by name (label_names). The modality must match the kind of records and lists — use "contacts" for contacts and "accounts" for accounts. This only detaches the records from the named lists; it does NOT delete the records themselves and it does NOT delete the list. Removing a record that is not on a list is a no-op. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_labels_update

ChatGPT
Rename an existing Apollo list (label). Pass the list id and the new name. Use List Lists (apollo_labels_index) to discover the id of the list you want to rename. The new name must be unique per modality within your team; reusing an existing name for that modality returns an error. This tool only renames a list — it does not add or remove records (use apollo_labels_add_entity_ids_to_label_names / apollo_labels_remove_entity_ids_from_label_names) and it cannot delete a list. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_organizations_bulk_enrich

ChatGPT
Use the Bulk Organization Enrichment endpoint to enrich data for up to 10 companies with a single API call. Using this endpoint will consume credits based on your account's pricing plan. Emphasize on this and ask for user confirmation before proceeding. Provide a list of domains to enrich. Enriched data potentially includes industry information, revenue, employee counts, funding round details, and corporate phone numbers and locations.

apollo_organizations_enrich

ChatGPT
Use the Organization Enrichment endpoint to enrich data for 1 company. Using this endpoint will consume credits based on your account's pricing plan. Emphasize on this and ask for user confirmation before proceeding. Enriched data potentially includes industry information, revenue, employee counts, funding round details, and corporate phone numbers and locations.\

apollo_organizations_job_postings

ChatGPT
Use the Organization Job Postings endpoint to retrieve the current job postings for a company. Using this endpoint will consume credits based on your account's pricing plan. Emphasize on this and ask for user confirmation before proceeding. This can help you identify companies that are growing headcount in areas that are strategically important for you. To protect Apollo's performance for all users, this endpoint has a display limit of 10,000 records.

apollo_people_bulk_match

ChatGPT
Use the Bulk People Enrichment endpoint to enrich data for up to 10 people with a single API call. Using this endpoint will consume credits based on your account's pricing plan. Emphasize on this and ask for user confirmation before proceeding. For each person, provide identifying details such as first name, last name, email, organization name, domain, or LinkedIn URL. By default, this endpoint does not return personal emails or phone numbers. Use the reveal_personal_emails parameter to retrieve emails.

apollo_people_match

ChatGPT
Use the People Enrichment endpoint to enrich data for 1 person. Using this endpoint will consume credits based on your account's pricing plan. Emphasize on this and ask for user confirmation before proceeding. Apollo relies on the information you pass via the endpoint's parameters to identify the correct person to enrich. If you provide more information about a person, Apollo is more likely to find a match within its database. By default, this endpoint does not return personal emails or phone numbers. Use the reveal_personal_emails parameter to retrieve personal emails.

apollo_sequences_create

ChatGPT
Create a new multi-step outreach sequence (also called an emailer campaign) in the user's Apollo workspace. A sequence has a name, an optional sending schedule, and an ordered list of steps. Each step is one of: auto_email (Apollo sends automatically), manual_email (rep clicks send), call, action_item, linkedin_step_connect, linkedin_step_message, linkedin_step_view_profile, linkedin_step_interact_post. BEFORE calling this tool: 1. Confirm with the user the sequence name, target audience, goal of the outreach, channel mix, and tone (Direct | Formal | Casual). Do not invent these. 2. Call apollo_emailer_campaigns_search with q_name set to the proposed name to avoid creating a duplicate. If a similarly-named sequence exists, surface it and ask before proceeding. 3. If the user wants a non-default sending schedule, call apollo_emailer_schedules_index and present matches. Otherwise omit emailer_schedule_id; the user's default will be applied. DEFAULTS this tool will use unless the user says otherwise (Apollo best practices): - active: false. Always create inactive. The user must explicitly confirm before activation. - permissions: "team_can_use". - 4-6 steps. Default escalation: auto_email -> auto_email -> linkedin_step_view_profile -> linkedin_step_message -> call. - 3-day intervals between email steps (wait_time: 3, wait_mode: "day"). First step wait_time: 0. - Email body length: 25-85 words. <= 50 words is recommended for cold outreach (correlates with +23% reply rate). - Subject line: <= 9 words; concrete; no clickbait. - At most 3 A/B variants per step (additional emailer_touches in the same step). AFTER creation: - The response will be large (full sequence with steps and touches). Echo only the sequence id, name, and a short step summary back to the user — do not paste the full payload. - To activate the sequence, call apollo_emailer_campaigns_approve with the sequence id ONLY after the user explicitly confirms sender email account, schedule, and step content. Activation will eventually send real emails from a real mailbox; never activate without explicit user approval. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_sequences_update

ChatGPT
Update an existing sequence's metadata, steps, touches, and templates in a single call. DECLARATIVE DIFF SEMANTICS — the emailer_steps array you send is the FULL intended state of the sequence after this call: - A step with an id that matches an existing step → that step is UPDATED in place. - A step without an id → a NEW step is CREATED. - An existing step whose id is NOT in your payload → that step is DELETED. - The same rules apply per-touch within each step (touch.id present = update, absent = create, missing existing = delete). - position is required on every step and must form a complete 1..N sequence in the order you intend. BEFORE calling this tool: 1. Fetch the current sequence (e.g. via the campaign-search response or by remembering the create response). You need each step's id and each touch's id to update them rather than create duplicates. 2. Show the user a clear before/after summary including which steps will be added, updated, removed, or reordered. Get explicit confirmation before calling. 3. If the sequence is currently active and the user has contacts enrolled, warn them that step changes can affect contacts mid-sequence. EXAMPLES: - Edit step 2's body only: pass all existing steps with their ids; only step 2's template body_html differs. - Add a LinkedIn step at position 3: send existing steps 1, 2 unchanged, then a new step (no id) at position 3, then existing steps shifted to positions 4, 5, ... - Delete a step: omit it from the payload; positions of the remaining steps must reflow as 1..N. The response is large (full sequence with steps and touches). Echo only the sequence id and a short before/after step summary back to the user. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_tasks_bulk_create

ChatGPT
Create many tasks in a single call. Pass an array of task attribute objects under tasks_attributes. Each object accepts the same fields as the single Create Task endpoint. REQUIRED: in addition to user_id and type, each task MUST provide at least one of contact_id, account_id, or opportunity_id. Tasks without any association will fail. Use the single Create Task endpoint when creating only one task. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_tasks_complete

ChatGPT
Mark a single task as completed. For a task that belongs to a sequence, completing it advances the contact to the next step of that sequence. Complete a task only after the real-world action it describes (sending the LinkedIn message, placing the call, etc.) has actually been performed. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_tasks_create

ChatGPT
Create a single task in Apollo. A task is an action item (call, email, LinkedIn step, generic action_item) assigned to a user and tied to a contact, account, or opportunity. REQUIRED: in addition to user_id and type, you MUST provide at least one of contact_id, account_id, or opportunity_id. Calls without any association will fail. Use Bulk Create Tasks when creating more than one task at a time. No deduplication is applied. If the team has a connected CRM, the task may be pushed to the CRM as part of creation. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_tasks_show

ChatGPT
Fetch the full detail of a single task by ID, including the action to perform (e.g. the LinkedIn message body or call script), the associated contact, and — for tasks that belong to a sequence — the sequence name and step position. Call this before completing or skipping a task to see what it asks you to do. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_tasks_skip

ChatGPT
Skip a single task without performing it. For a task that belongs to a sequence, skipping it moves the contact past this step. Tasks controlled by a workflow approval cannot be skipped. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_tasks_update

ChatGPT
Edit an existing task in place — change its title, note, priority, due date, assignee, or the message body (subject / body_text) for email and LinkedIn-step tasks. Use this instead of skipping and recreating a task. Only scheduled (open) tasks can be edited fully. For a task that is already completed or skipped only note, priority, and contact_id are applied; all other fields are ignored. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_usage_stats_credit_usage_stats

ChatGPT
Retrieve credit usage stats for the authenticated team — credits used, remaining, and reset windows for enrichment/people-search/email-reveal credits. Takes no input — scoped to the authenticated team automatically. For a single user's credit balance, use the Profile endpoint with include_credit_usage=true. If this tool returns an unexpected, empty, or unhelpful result, call apollo_feedback_log to report it.

apollo_users_api_profile

ChatGPT
Use the Profile endpoint to get the user's profile information (name, email, title, id) Set include_credit_usage to true to include credit usage information in the response. Credit Usage includes information like remaining credits, credits used etc.

apollo_webhook_result_show

ChatGPT
Poll for the result of an asynchronous enrichment request, such as a phone-number reveal started by apollo_people_match or apollo_people_bulk_match with reveal_phone_number=true. Pass the top-level request_id returned by that enrichment call (not any nested id). POLLING (default assumption is KEEP POLLING): A not-yet-ready result comes back as a 404 that carries a retry_after_seconds value. IMPORTANT: this pending 404 currently also carries a message mentioning "older than 30 days" — IGNORE that wording. The backend returns that same message while the result is simply still being prepared, so it does NOT mean the request expired. As long as the 404 carries retry_after_seconds and does NOT carry an explicit error_code field of "request_id_unknown", "request_id_expired", or "invalid_request_id", the result is still pending: wait retry_after_seconds and poll again. (A future API change will label this pending case error_code: "result_pending".) Give up after ~5 attempts (roughly 50 seconds total), then use the "still processing" message below. Bulk reveals may take longer than single reveals. TERMINAL RESPONSES — do NOT retry these, regardless of any retry_after_seconds hint: - 200 with status: success — result is ready. Phone numbers are grouped by type (mobile_phone, direct_phone, corporate_phone, home_phone, other_phone). Results are available for 30 days. - 200 with status: failed — enrichment failed on Apollo's side. Tell the user: "Apollo attempted to reveal the phone number but the enrichment failed. No credits were charged for the reveal." - 404 / 410 carrying an explicit error_code field of "request_id_unknown" or "request_id_expired" — the request_id is genuinely unrecognized or expired. NOTE: a 404 whose message merely mentions "older than 30 days" but has NO such error_code field is the pending case above — keep polling, do NOT treat it as terminal. Only treat as terminal when the structured error_code is present. Tell the user: "That request ID isn't recognized by Apollo. This usually means the ID was mistyped, belongs to a request older than 30 days (results expire after 30 days), or was never issued. Please double-check the request ID or start a fresh phone reveal." Do NOT tell the user to try again later for this case. - 400 with error_code: "invalid_request_id" — request_id was malformed. Tell the user the ID is invalid and to pass the top-level request_id from a fresh match/bulk_match call. - Pending 404, retries exhausted (~5 attempts) — the job is still processing on Apollo's side. Tell the user: "The phone reveal is still processing and hasn't returned yet from this tool. Credits are only charged for numbers that Apollo successfully reveals, so if the job later completes you'll be charged only for what was revealed. To view the number once it's ready, open Apollo (app.apollo.io) and search for the contact by name." When the person's first_name/last_name are known from the enrichment, name the contact explicitly (e.g. "search for Jane Smith in Apollo"). Do NOT say the reveal "failed" or "could not be retrieved" in this case — it timed out from the poll's perspective, not from Apollo's, and the job may still succeed. NO-NUMBER-ON-FILE (success with empty phone arrays): When status is success but every phone_type array is empty, tell the user: "Apollo doesn't have a phone number on file for this contact. No credits were charged." DNC (DO NOT CALL) HANDLING — MANDATORY: Each returned phone number carries a dnc_status_cd, one of: "found", "not_found", "pending". Only "found" means the number is on a Do Not Call registry. When ANY returned number has dnc_status_cd: "found", you MUST surface a Do Not Call warning prominently alongside that number — immediately before or on the same line as the number, never in a footnote or buried in a table cell. Use wording consistent with this (do NOT cite specific statutes beyond the TCPA, and do NOT invent penalty amounts): "⚠️ Do Not Call — this number is listed on a Do Not Call registry. Check applicable telemarketing regulations before dialing; this may implicate the T…

apollo_add_contacts_to_sequence

Claude

apollo_bulk_enrich_people

Claude

apollo_create_contacts

Claude

apollo_enrich_organization

Claude

apollo_enrich_person

Claude

apollo_get_job_postings

Claude

apollo_list_email_accounts

Claude

apollo_remove_contacts_from_sequence

Claude

apollo_search_contacts

Claude

apollo_search_organizations

Claude

apollo_search_people

Claude

apollo_search_sequences

Claude

apollo_update_contacts

Claude

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

App Stats

86

Tools

1

Prompts

ChatGPT, Claude

Platforms

Works with

ChatGPT
Claude

Data refreshed daily