Apollo CLI

Apollo CLI gives you shell-native access to the full Apollo API. Search 240M+ contacts, enrich people and companies, manage CRM records, and run sequences without leaving your terminal. It's pipeable with jq, supports multiple output formats, and works natively with AI coding agents like Claude Code and Cursor.

Get started

Choose the installation method that works best for your environment.

HomebrewPrebuilt BinaryFrom Source
Recommended for macOS or Linux. Homebrew handles installation and upgrades.

View Homebrew instructions.
Download a standalone binary for macOS, Linux, or Windows. Node.js isn't required.

View binary instructions.
Build Apollo CLI locally with Node.js 18 or above.

View source instructions.

Before you install Apollo CLI, make sure you have:

  • macOS, Linux, or Windows.
  • An active Apollo.io account.

Learn how to install and authenticate, browse the available commands, and review usage guidance.

Install and authenticate

You can install Apollo CLI in three ways: via Homebrew, a prebuilt binary, or from source.

Homebrew

To install via Homebrew:

brew install apolloio/apollo-io-cli/apollo-io-cli

Or tap once, then install by short name:

brew tap apolloio/apollo-io-cli
brew trust apolloio/apollo-io-cli
brew install apollo-io-cli

Upgrade anytime with brew upgrade apollo-io-cli.

Prebuilt binary

No Node.js required. Download the binary for your platform from the GitHub releases page:

PlatformFile
macOS (Apple Silicon)apollo-macos-arm64
macOS (Intel)apollo-macos-x64
Linux (x64)apollo-linux-x64
Windows (x64)apollo-windows-x64.exe

To set up the binary on macOS or Linux:

  1. Make the file executable and move it to your PATH.
chmod +x apollo-macos-arm64
mv apollo-macos-arm64 /usr/local/bin/apollo
xattr -d com.apple.quarantine /usr/local/bin/apollo

To set up the binary on Windows, rename it to apollo.exe and place it in a directory on your PATH (for example, %USERPROFILE%\bin):

Move-Item .\apollo-windows-x64.exe "$env:USERPROFILE\bin\apollo.exe"

You have now installed Apollo CLI.

Each release also includes a GPG signature file. To verify the binary:

gpg --import release-signing-key.asc
gpg --verify apollo-macos-arm64.asc apollo-macos-arm64

From source

Requires Node 18 or above.

git clone https://github.com/apolloio/apollo-io-cli.git
cd apollo-io-cli
npm install
npm link

Authenticate

Apollo CLI uses OAuth 2.0 — no API key needed. Log in once and your token refreshes automatically.

To authenticate:

  1. Run the login command. Your browser opens to authorize the connection and saves your credentials to ~/.config/apollo/credentials.
apollo auth login
  1. Confirm you're logged in.
apollo auth whoami

You have now authenticated Apollo CLI.

To log out and revoke your credentials at any time, run apollo auth logout.

Check Yourself Before You Wreck Yourself
Run apollo auth whoami before any other command. If authentication fails, resolve it first — don't work around it.


Use Apollo CLI with AI Agents

Apollo CLI works natively with AI coding agents. A Claude Code skill is available that gives the agent full knowledge of every command, its options, JSON response shapes, and jq examples.

The skill gives AI agents detailed knowledge of Apollo CLI commands, options, response shapes, and jq examples. Install it globally to make it available across projects or locally to scope it to a single repository.

Set up with Claude Code

Global install (available in every project on your machine):

mkdir -p ~/.claude/skills/apollo-cli
curl -fsSL https://raw.githubusercontent.com/apolloio/apollo-io-cli/main/.claude/skills/apollo-cli/SKILL.md \
  -o ~/.claude/skills/apollo-cli/SKILL.md

Per-project install (scoped to one repo):

mkdir -p .claude/skills/apollo-cli
curl -fsSL https://raw.githubusercontent.com/apolloio/apollo-io-cli/main/.claude/skills/apollo-cli/SKILL.md \
  -o .claude/skills/apollo-cli/SKILL.md

Windows (PowerShell) — global install:

New-Item -ItemType Directory -Force "$env:USERPROFILE\.claude\skills\apollo-cli" | Out-Null
Invoke-WebRequest `
  -Uri https://raw.githubusercontent.com/apolloio/apollo-io-cli/main/.claude/skills/apollo-cli/SKILL.md `
  -OutFile "$env:USERPROFILE\.claude\skills\apollo-cli\SKILL.md"

For a per-project install on Windows, swap $env:USERPROFILE\.claude for .claude in the path above.

Claude Code automatically loads any skill file it finds — global or local. You can also invoke it manually with /apollo-cli.

Set up with Cursor or other agents

Point your project instructions at the raw skill URL directly — no file copying required:

https://raw.githubusercontent.com/apolloio/apollo-io-cli/main/.claude/skills/apollo-cli/SKILL.md

Add this URL to your AGENTS.md or project instructions and any agent in any repo can use it. It always reflects the latest version.


Available commands

Browse Apollo CLI commands by what you want to accomplish:

People

Search for people, enrich profiles, retrieve contact details, and find employees at specific companies.

apollo people search \
  --title "VP Engineering" \
  --city "San Francisco" \
  --seniority vp \
  --domain stripe.com \
  --per-page 25

apollo people enrich --email [email protected]
apollo people enrich --name "Jordan Lee" --company "Northstar"
apollo people enrich --linkedin https://linkedin.com/in/jordanlee

apollo people enrich \
  --first-name Jordan \
  --last-name Lee \
  --company "Northstar"

apollo people search \
  --title CTO \
  --employees "51,200" \
  --hiring-for "Software Engineer"

apollo people bulk-enrich --emails [email protected] [email protected]
apollo people email --id <person-id>
apollo people get --id <person-id>
apollo people employees --domain stripe.com --per-page 50
CommandWhat It DoesCommon Options
apollo people searchSearch Apollo's people database using person and company filters.--query, --title, --include-similar-titles, --city, --seniority, --department, --email-status, --technology, --using-all-technology, --not-using-technology, --domain, --industry, --keyword-tags, --organization-ids, --company-location, --employees, --hiring-for, --job-locations, --num-jobs, --job-posted, --revenue, --funding, --total-funding, --page, --per-page
apollo people enrichEnrich one person using an email address, hashed email, LinkedIn URL, name, or company details.--email, --hashed-email, --linkedin, --first-name, --last-name, --name, --company, --domain, --reveal-personal-emails
apollo people bulk-enrichEnrich multiple people using email addresses or a JSON file of match records.--emails, --file, --reveal-personal-emails
apollo people emailRequest an email address using an Apollo person ID.--id
apollo people getGet complete person information using an Apollo person ID.--id
apollo people employeesFind employees at a company using its name, domain, or LinkedIn URL.--name, --domain, --linkedin, --page, --per-page

For people enrich, provide at least one supported identifier. When matching by name, include company information to improve accuracy.

For people bulk-enrich, provide either --emails or --file. The file can contain a JSON array or an object with a details array:

{
  "details": [
    {
      "name": "Jordan Lee",
      "domain": "northstar.io"
    },
    {
      "email": "[email protected]"
    }
  ]
}

The --industry option for people search expects Apollo industry tag IDs, not free-text industry names. Free-text values may return an HTTP 422 error.

Company filters such as --employees, --hiring-for, --industry, --revenue, --funding, --total-funding, and --company-location apply to each person's employer. Combine these filters with person attributes in a single people search command instead of searching for companies first.

Companies

Search for companies, enrich company profiles, retrieve organization details, and find active job postings.

apollo companies search \
  --industry SaaS \
  --employees "51,200" \
  --location "United States" \
  --per-page 25

apollo companies search \
  --technology react \
  --not-location China \
  --funding "1000000,10000000"

apollo companies search \
  --name "Cedar Peak Labs" \
  --domains cedarpeaklabs.com \
  --per-page 10

apollo companies search \
  --hiring-for "Account Executive" \
  --job-locations "New York" \
  --num-jobs "5,50"

apollo companies enrich --domain stripe.com
apollo companies enrich --name "Stripe"
apollo companies bulk-enrich --domains stripe.com notion.so
apollo companies get --id <organization-id>
apollo companies jobs --id <organization-id> --per-page 50
CommandWhat It DoesCommon Options
apollo companies searchSearch Apollo's company database using firmographic, technology, funding, and hiring filters.--query, --name, --domains, --organization-ids, --location, --not-location, --employees, --industry, --technology, --revenue, --funding, --funding-date, --total-funding, --hiring-for, --job-locations, --num-jobs, --job-posted, --page, --per-page
apollo companies enrichEnrich one company using its domain or name.--domain, --name
apollo companies bulk-enrichEnrich multiple companies by domain.--domains
apollo companies getGet complete company information using an Apollo organization ID.--id
apollo companies jobsGet active job postings for a company.--id, --page, --per-page

For companies enrich, provide either --domain or --name. When only a company name is provided, Apollo CLI searches for the company, identifies its domain, then enriches the matching organization.

Use comma-separated minimum and maximum values for range options:

apollo companies search \
  --employees "51,200" \
  --revenue "1000000,5000000" \
  --funding-date "2026-01-01,2026-06-30"

News

Find news articles associated with a company using its name or Apollo organization ID.

apollo news search --company "Stripe"
apollo news search --id <organization-id>
CommandWhat It DoesCommon Options
apollo news searchFind news articles related to a company.--company, --id

Contacts

Manage CRM contacts in your team's Apollo account.

apollo contacts search --query "revenue operations" --per-page 25
apollo contacts create --first-name Priya --last-name Shah --email [email protected]
apollo contacts update --id <contact-id> --title "VP of Revenue Operations"
apollo contacts show --id <contact-id>
apollo contacts bulk-create --file ./contacts.json
apollo contacts bulk-update --ids <contact-id-1> <contact-id-2> --owner-id <user-id>
apollo contacts update-stages --ids <contact-id-1> <contact-id-2> --stage-id <stage-id>
apollo contacts update-owners --ids <contact-id-1> <contact-id-2> --owner-id <user-id>
apollo contacts stages
CommandWhat It DoesCommon Options
apollo contacts searchSearch contacts saved in your team's Apollo account.--query, --sort-by, --sort-asc, --page, --per-page
apollo contacts createCreate a contact.--first-name, --last-name, --email, --organization, --title, --account-id, --website-url, --address, phone fields, --label, --dedupe
apollo contacts updateUpdate an existing contact.--id and the same contact fields supported by create
apollo contacts showView a specific contact.--id
apollo contacts bulk-createCreate contacts from a JSON file.--file
apollo contacts bulk-updateApply shared values to multiple contacts or update contacts from a JSON file.--ids, --owner-id, --account-id, or --file
apollo contacts update-stagesMove contacts to a contact stage.--ids, --stage-id
apollo contacts update-ownersReassign contacts to another owner.--ids, --owner-id
apollo contacts stagesList available contact stages and their IDs.None

For bulk-create, provide a JSON array or an object containing a contacts array:

{
  "contacts": [
    {
      "first_name": "Priya",
      "last_name": "Shah",
      "email": "[email protected]"
    },
    {
      "first_name": "Elias",
      "last_name": "Morgan",
      "email": "[email protected]"
    }
  ]
}

For bulk-update, you can apply the same owner or account to multiple contacts:

apollo contacts bulk-update \
  --ids <contact-id-1> <contact-id-2> \
  --owner-id <user-id>

You can also provide per-contact values in a JSON array or an object containing contact_attributes:

{
  "contact_attributes": [
    {
      "id": "<contact-id-1>",
      "owner_id": "<user-id-1>"
    },
    {
      "id": "<contact-id-2>",
      "owner_id": "<user-id-2>"
    }
  ]
}

Accounts

Manage CRM accounts that your team has added to Apollo.

apollo accounts create --name "Cedar Peak Labs" --domain cedarpeaklabs.com
apollo accounts update --id <account-id> --phone 555-303-1234
apollo accounts search --query "Cedar Peak" --per-page 25
apollo accounts show --id <account-id>
apollo accounts bulk-create --file ./accounts.json
apollo accounts bulk-update --ids <account-id-1> <account-id-2> --stage-id <stage-id>
apollo accounts update-owners --ids <account-id-1> <account-id-2> --owner-id <user-id>
apollo accounts stages
CommandWhat It DoesCommon Options
apollo accounts createCreate an account.--name, --domain, --phone, --address
apollo accounts updateUpdate an existing account.--id, --name, --domain, --phone, --address
apollo accounts searchSearch accounts by name, stage, label, or other criteria.--query, --stage-ids, --label-ids, --sort-by, --sort-asc, --page, --per-page
apollo accounts showView a specific account.--id
apollo accounts bulk-createCreate accounts from a JSON file.--file
apollo accounts bulk-updateApply shared values to multiple accounts or update accounts from a JSON file.--ids, --name, --owner-id, --stage-id, or --file
apollo accounts update-ownersReassign accounts to another owner.--ids, --owner-id
apollo accounts stagesList available account stages and their IDs.None

For bulk-create, provide a JSON array or an object containing an accounts array:

{
  "accounts": [
    {
      "name": "Cedar Peak Labs",
      "domain": "cedarpeaklabs.com"
    },
    {
      "name": "Horizon Grid",
      "domain": "horizongrid.io"
    }
  ]
}

For per-account bulk updates, provide a JSON array or an object containing account_attributes:

{
  "account_attributes": [
    {
      "id": "<account-id-1>",
      "owner_id": "<user-id-1>"
    },
    {
      "id": "<account-id-2>",
      "stage_id": "<stage-id>"
    }
  ]
}

Deals

Create, search, view, and update opportunities in your Apollo CRM.

apollo deals create \
  --name "Horizon Grid - Annual Renewal" \
  --amount 50000 \
  --currency USD \
  --account-id <account-id>

apollo deals search --account-id <account-id> --per-page 25
apollo deals show --id <deal-id>
apollo deals update --id <deal-id> --stage-id <stage-id> --amount 75000
apollo deals stages
CommandWhat It DoesCommon Options
apollo deals createCreate a deal.Required: --name. Optional: --owner-id, --account-id, --amount, --currency, --stage-id, --pipeline-id, --close-date, --description
apollo deals searchSearch deals.--query, --stage-id, --pipeline-id, --account-id, --owner-id, --sort-by, --sort-asc, --page, --per-page
apollo deals showView a specific deal.--id
apollo deals updateUpdate an existing deal.--id, --name, --owner-id, --amount, --stage-id, --close-date
apollo deals stagesList deal stages and their IDs.None

Use dates in YYYY-MM-DD format when setting --close-date.

Email accounts

List the sending mailboxes connected to your team's Apollo account.

apollo email-accounts list

Use the returned mailbox ID as the value for --from-email-account when you run apollo sequences add-contacts.

Sequences

Create and update sequences, manage sending schedules, approve sequence changes, and enroll or remove contacts.

apollo sequences search --query "fintech outreach" --per-page 10
apollo sequences schedules

apollo sequences create \
  --name "Q3 Fintech Outreach" \
  --steps-file ./steps.json \
  --schedule-id <schedule-id>

apollo sequences update \
  --id <sequence-id> \
  --steps-file ./steps.json \
  --active

apollo sequences approve --id <sequence-id>
apollo sequences abort --id <sequence-id>
apollo sequences archive --id <sequence-id>

apollo sequences add-contacts \
  --id <sequence-id> \
  --from-email-account <email-account-id> \
  --contact-id <contact-id>

apollo sequences remove-contacts \
  --contact-id <contact-id> \
  --sequence-id <sequence-id> \
  --mode remove
CommandWhat It DoesCommon Options
apollo sequences searchSearch sequences by name.--query, --page, --per-page
apollo sequences schedulesList sending schedules.Use a returned schedule ID with sequences create or sequences update
apollo sequences createCreate a sequence from a JSON steps file.Required: --name, --steps-file. Optional: --schedule-id, --permissions, --exact-daytime, --active, --label
apollo sequences updateUpdate an existing sequence.Required: --id, --steps-file. Optional: --name, --schedule-id, --permissions, --exact-daytime, --active, --inactive, --label
apollo sequences approveApprove a sequence that is pending review.--id
apollo sequences abortDeactivate an active sequence and stop future sends.--id
apollo sequences archiveArchive a sequence.--id
apollo sequences add-contactsEnroll contacts in a sequence.Required: --id, --from-email-account, and either --contact-id or --label. Additional options include --from-email, --no-email, --unverified-email, --job-change, --active-in-other, --finished-in-other, --same-company, --without-ownership, --add-if-in-queue, --skip-verification, --status, and --auto-unpause-at
apollo sequences remove-contactsRemove contacts from a sequence or stop future sequence steps.--contact-id, --sequence-id, --mode remove|stop, --reason

The --steps-file value must contain the complete set of emailer_steps that the sequence should contain after the create or update request.

This One's for Real
apollo sequences add-contacts sends real emails to real people. Always confirm the sequence, sending mailbox, and contact list before running the command.

Calls

Log phone calls, search existing call records, and update call details.

apollo calls log \
  --contact-id <contact-id> \
  --from 4155550100 \
  --to 4155550199 \
  --duration 120 \
  --note "Left a voicemail"

apollo calls search \
  --contact-id <contact-id> \
  --sort-by start_time \
  --per-page 25

apollo calls update \
  --id <call-id> \
  --status completed \
  --note "Connected and scheduled a follow-up"
CommandWhat It DoesCommon Options
apollo calls logCreate a phone-call record.--contact-id, --account-id, --opportunity-id, --from, --to, --start, --end, --duration, --note, --outcome-id, --purpose-id, --status, --call-identifier
apollo calls searchSearch phone-call records and notes.--query, --user-id, --contact-id, --account-id, --sort-by, --sort-asc, --page, --per-page
apollo calls updateUpdate an existing phone-call record.Required: --id. Optional: --note, --outcome-id, --purpose-id, --status, --contact-id

Use ISO 8601 timestamps for --start and --end. The --duration value is measured in seconds.

Use --call-identifier as an external identifier when you need to match or upsert a call from another system.

Tasks

Create, search, view, update, complete, and skip Apollo tasks. Each task must be associated with a contact, account, or opportunity.

apollo tasks create \
  --user-id <user-id> \
  --type action_item \
  --title "Review renewal brief" \
  --priority medium \
  --account-id <account-id>

apollo tasks bulk-create --file ./tasks.json
apollo tasks search --priority high --per-page 25
apollo tasks show --id <task-id>
apollo tasks update --id <task-id> --priority high --due-at 2026-08-01T09:00:00Z
apollo tasks complete --id <task-id> --note "Reviewed and sent feedback"
apollo tasks skip --id <task-id> --note "No longer required"
CommandWhat It DoesCommon Options
apollo tasks createCreate a task.Required: --user-id, --type, and one of --contact-id, --account-id, or --opportunity-id. Optional: --creator-id, --title, --note, --priority, --status, --due-at
apollo tasks bulk-createCreate tasks from a JSON file.--file
apollo tasks searchSearch tasks.--query, --user-id, --contact-id, --account-id, --opportunity-id, --priority, --sort-by, --page, --per-page
apollo tasks showView a specific task.--id
apollo tasks updateUpdate an existing task.--id, --user-id, --creator-id, --contact-id, --type, --title, --note, --priority, --status, --due-at
apollo tasks completeMark a task complete.--id, optional --note
apollo tasks skipSkip a task.--id, optional --note, --sync-index

For bulk-create, provide a JSON array or an object containing tasks_attributes.

Users

View your Apollo profile and find other users in your team's Apollo account.

apollo users profile
apollo users profile --credits
apollo users search --query "engineer"
CommandWhat It DoesCommon Options
apollo users profileView your authenticated Apollo user profile.Optional --credits to include credit usage fields
apollo users searchFind teammates by name, email address, or title.--query, --page, --per-page

Emails

Draft, send, check, and search one-off outreach emails outside sequences.

apollo emails draft \
  --contact-id <contact-id> \
  --subject "Planning for next quarter" \
  --body-html "<p>Hi Mateo,</p><p>Would you be open to a short conversation next week?</p>"

apollo emails send --id <emailer-message-id>
apollo emails status --id <emailer-message-id>
apollo emails search --query "next quarter" --stats delivered opened --per-page 25
CommandWhat It DoesCommon Options
apollo emails draftCreate an email draft.Requires --contact-id or --reply-to. Optional: --subject, --body-html, --body-file, --template-id, --task-id, --tracking, --attachment-ids, --recipients-file
apollo emails sendSend a drafted email immediately.--id
apollo emails statusCheck the delivery status of an email.--id
apollo emails searchSearch email activity, content, and delivery status.--query, --user-ids, --stats, --reply-classes, --email-account-id, --sequence-ids, --not-sequence-ids, --date-range-mode, --date-from, --date-to, --page, --per-page

Use --recipients-file to provide a JSON array of custom recipients:

[
  {
    "email": "[email protected]",
    "contact_id": "<contact-id>",
    "recipient_type_cd": "to"
  },
  {
    "email": "[email protected]",
    "recipient_type_cd": "bcc"
  }
]

This One's for Real
apollo emails send delivers a real email. Review the subject, content, recipients, and sending account before running the command.

Labels

Create and manage Apollo contact and account lists.

apollo labels list
apollo labels create --name "SaaStr 2026 Prospects" --modality contacts
apollo labels update --id <label-id> --name "SaaStr 2026 Follow-up"
apollo labels add --ids <contact-id-1> <contact-id-2> --names "SaaStr 2026 Follow-up" --modality contacts
apollo labels remove --ids <contact-id-1> --names "SaaStr 2026 Follow-up" --modality contacts
CommandWhat It DoesCommon Options
apollo labels listList labels in your team's Apollo account.None
apollo labels createCreate a contact or account list.--name, --modality contacts|accounts, optional --book-of-business
apollo labels updateRename a list.--id, --name
apollo labels addAdd contacts or accounts to one or more lists.--ids, --names, --modality, optional --async
apollo labels removeRemove contacts or accounts from one or more lists.--ids, --names, --modality, optional --async

When you run labels add, Apollo creates any list name that doesn't already exist. Use --async for large batches.

Fields

List Apollo fields and create custom fields.

apollo fields list
apollo fields list --source custom
apollo fields create --label "Renewal Date" --modality contact --type date
apollo fields custom
CommandWhat It DoesCommon Options
apollo fields listList available fields.Optional --source
apollo fields createCreate a custom field.--label, --modality contact|account|opportunity, --type string|textarea|number|date|datetime|boolean, optional --max-length
apollo fields customList custom typed fields and the field IDs used in typed_custom_fields payloads.None

Notes

List notes associated with contacts, accounts, opportunities, calendar events, or conversations.

apollo notes list --contact-id <contact-id>
apollo notes list --account-id <account-id> --limit 50 --sort-direction desc
apollo notes list --conversation-id <conversation-id>
OptionDescription
--contact-idReturn notes for a contact.
--account-idReturn notes for an account.
--opportunity-idReturn notes for an opportunity.
--calendar-event-idReturn notes for a calendar event.
--conversation-idReturn notes for a conversation.
--conversation-idsReturn notes for multiple conversations.
--contact-idsReturn notes for multiple contacts.
--start-dateReturn notes created on or after a date.
--sort-byChoose the field used to sort results.
--sort-directionSort in ascending or descending order.
--skipSkip a number of results.
--limitLimit the number of returned results.

Conversations

Search recorded calls and meetings, view conversation details, and export Conversation Intelligence data.

apollo conversations search \
  --type phone_call \
  --date-from 2026-01-01T00:00:00Z \
  --limit 25

apollo conversations show --id <conversation-id>

apollo conversations export \
  --start 2026-01-01T00:00:00Z \
  --end 2026-03-31T23:59:59Z \
  --email [email protected]

apollo conversations export-status --id <export-id>
CommandWhat It DoesCommon Options
apollo conversations searchSearch recorded calls and meetings.--type video_conference|phone_call, --account-id, --contact-ids, --tag-ids, --tracker-ids, --organization-ids, --date-from, --date-to, --sort-by, --limit, --page
apollo conversations showView conversation details.--id
apollo conversations exportStart a conversation export.Required: --start, --end, --email
apollo conversations export-statusCheck the status of a conversation export.--id

Use ISO timestamps in GMT for conversation date filters and exports.

Webhooks

Retrieve the stored result of an asynchronous webhook-based request, such as an asynchronous bulk enrichment request.

apollo webhooks result --request-id <request-id>
OptionDescription
--request-idThe request ID returned by the asynchronous operation.

Auth

CommandWhat It Does
apollo auth loginAuthorize Apollo CLI through browser-based OAuth and save the credentials locally.
apollo auth whoamiConfirm which Apollo user is currently authenticated.
apollo auth logoutRevoke the current token and remove the saved credentials.

Usage and credits

Review your team's credit consumption and API rate-limit usage.

apollo usage credits
apollo usage api
CommandWhat It Does
apollo usage creditsView your team's limits, consumption, and remaining lead, direct-dial, export, conversation, AI, and power-up credits.
apollo usage apiView per-endpoint API usage, rate limits, and remaining request capacity.

The usage credits response includes each available credit type with its limit, consumed amount, and remaining balance.

Analytics

Run an Apollo analytics report using a complete sync_report request body from a JSON file.

apollo analytics report --payload ./report.json
CommandWhat It DoesCommon Options
apollo analytics reportSend a complete analytics request body to Apollo's synchronous reporting endpoint.Required: --payload. Optional: --format

Apollo CLI passes the JSON payload through without transforming it. The file must contain the complete metrics, grouping, filter, sorting, and date-range structure expected by the analytics endpoint.

Example report.json:

{
  "metrics": [
    {
      "value": "num_emails_sent",
      "smart_datetime_reference": "emailer_message__sent_at",
      "smart_user_id_reference": "emailer_message__user_id"
    }
  ],
  "group_by": [],
  "pivot_group_by": [],
  "sorts": [],
  "filters": {},
  "date_ranges": [
    {
      "modality": "last_30_days"
    }
  ],
  "group_by_totals_selected": false,
  "pivot_group_by_totals_selected": false
}

Output and best practices

Review global flags, output formats, pagination, and best practices for reliable terminal, script, and AI-agent workflows.

Global flags

Global flags must appear before the command group and subcommand.

FlagDescription
--add-header <key:value>Add a custom HTTP header to the request. Repeat the flag to add multiple headers. Header names are normalized to lowercase.
apollo --add-header x-request-id:abc123 people search --query "Rina Patel"

apollo \
  --add-header x-workspace-region:us-west \
  --add-header x-request-source:automation \
  contacts search --query "Morgan"

Output formats

Every command accepts -f, --format. The default format is json.

FormatFlagBest For
JSON--format jsonPretty-printed structured output for scripts, AI agents, and jq.
JSONL--format jsonlOne JSON object per line for streaming and data pipelines.
CSV--format csvFlat exports for spreadsheets. Nested objects and arrays are stringified into a single cell.
YAML--format yamlHuman-readable inspection of deeply nested responses.
Table--format tableQuick terminal browsing of small responses.
apollo companies search --industry SaaS --format table
apollo people bulk-enrich \
  --emails [email protected] [email protected] \
  --format jsonl
apollo news search --company "Stripe" --format yaml
apollo people search \
  --title CTO \
  --domain stripe.com \
  --format csv > ctos.csv

Search and list responses typically contain pagination metadata alongside an array of records. CSV and table output may render that array as a stringified value. For analysis or record extraction, use JSON with jq:

apollo companies search --industry SaaS --format json \
  | jq '.accounts[]' --compact-output > companies.jsonl

apollo people search --domain stripe.com --format json \
  | jq '.people[] | {name: .name, title: .title}'

Pagination

Use these flags to page through large result sets:

  • --per-page <n> — Results per page (default: 10).
  • --page <n> — Page number (default: 1).
  • --sort-by <field> — Sort field (varies by command).
  • --sort-asc — Sort in ascending order (default is descending).
apollo people search --title "VP of Engineering" --per-page 25 --page 2

Best Practices

  • Authenticate first — Run apollo auth whoami before anything else. Surface errors to the user — don't work around them.
  • Use JSON and jq together--format json is the most reliable format for field extraction in scripts and agents.
  • Don't guess IDs — Always call apollo email-accounts list to get a verified inbox ID before enrolling contacts in a sequence.
  • Treat sequence enrollment as a write actionsequences add-contacts sends real emails. Confirm the sequence, sender, and contact list first.
  • Page through large result sets — The default is ten results per page. Use --per-page and --page for larger searches.

Next Steps

Check out the following resources to keep building with Apollo:

ResourceDescription
Apollo APIGet familiar with Apollo API, the same endpoints CLI uses under the hood.
Apollo MCPUse Apollo directly inside your favorite AI tool without leaving the conversation.
Search for PeopleLearn how people search works and what filters are available.
Enrichment OverviewUnderstand how enrichment works, what data it returns, and how credits are consumed.
Developer FAQsFind answers to the most common questions about Apollo API.

Did this page help you?