Today

What's waiting on you, and how the pipeline is moving.

Needs you
Pipeline right now
Recent activity See all

Signals

Harvey proposes what it knows how to look for. You decide what actually defines a good prospect — nothing is collected until you confirm it.

Cohort builder

A prospect list is a query, not a file. Pick the signals a good prospect must have — and any that disqualify them — and see how many companies match right now.

Discover

Find businesses matching your ICP. Pick a source, see what it will cost, then run it — nothing is called until you press the button.

Search sources

Companies

Organizations Harvey has researched. Click a row to see its contacts.

Contacts

People Harvey has found, how sure it is of their address, and where each one stands.

Campaigns

Email sequences Harvey has written, and how far each one has got.

Custom email templates

Saved drafts for the Outbox

Write the subject and body you want. Use {{first_name}}, {{company}}, or {{title}} for each recipient. Applying a template always sends drafts back for review.

Outbox

Emails waiting for you. Read one, decide, move on — A approve, R reject, E edit, J/K to move.

Conversations

Every reply, and how Harvey handled it.

Activity

A running log of every action Harvey's agents have taken.

Usage

Model usage on your subscription (Claude or Codex): calls and tokens by provider, agent and task. Subscription plans aren't billed per token, so there are no dollar costs here.

Settings

Credentials are stored locally in .env and never sent anywhere except the services themselves.

Business and outreach setup

Your business and product

These settings are saved in harvey.local.yaml and survive Docker restarts. Restart Harvey after changing them.


        

Harvey adds the sender name, company, mobile, email and website under cold emails. Zoho Mail displays the logo when images are allowed.

Repeats every week in the operator time zone above. Approved outreach and replies wait outside these hours; Harvey can still process incoming mail when its heartbeat runs.

This changes Harvey's analysis and writing model. Company search uses the source selected in Discover. Restart Harvey after saving.

These addresses may bounce. Harvey shows a warning in Outbox and still requires your approval; invalid and unverified addresses remain blocked.

Advanced configuration

Edit the complete YAML settings when you need fields beyond this form.

Sending
Email provider Active: …

Gmail / Google Workspace Recommended

Use a mailbox on a dedicated secondary domain. Create an OAuth client (type "Desktop app") in Google Cloud Console → Gmail API, paste the id and secret, save, then run harvey gmail auth.

Zoho Mail MCP

Paste the URL from your Zoho MCP server's Connect page. Click Connect Zoho, sign in on Zoho's page, and return here. The server needs getMailAccounts, getAllFolders, listEmails, getMessageContent, sendEmail and sendReplyEmail. Click Test to see which tools are missing.

SMTP + IMAP mailbox (password fallback)

Any real mailbox, including Zoho Mail. For Zoho personal/free accounts use smtp.zoho.com and imap.zoho.com; for paid custom-domain accounts use smtppro.zoho.com and imappro.zoho.com. Use ports 587 (SMTP) and 993 (IMAP), and check your Zoho account's exact server details. Zoho setup guide.

Reading replies from a different IMAP server or login

Microsoft 365 / Outlook

Microsoft turned off password sign-in for IMAP, so Outlook mailboxes connect with OAuth. In Entra → App registrations, register an app for your organization only and add the redirect URI http://localhost:8766 as "Public client/native". Paste both IDs here, save, then run harvey microsoft auth. No client secret is needed.

Instantly Legacy

Get your API key from Instantly Settings → Integrations (Growth plan or higher for API).

Discovery APIs OpenStreetMap and local search work without an API key

OpenStreetMap (Overpass)

Searches mapped physical business types. Public Overpass servers may be unavailable; use your own or a hosted server URL for reliable runs. Online-only businesses need web search.

Self-hosted search (SearXNG)

Runs in Docker on this computer. Searches external engines without a paid search API key; results may be limited when an engine blocks automated requests.

2GIS Places

Searches the 2GIS business directory by trade and city. Create a Places API key in the 2GIS Platform Manager. API usage follows your 2GIS plan.

Serper

Google search discovery. Create a key at serper.dev, then paste it here.

DataForSEO

Business listings, organic rank and Google Maps. Use the API login and password from DataForSEO API access.

Email verification Required before drafting and sending

Verifiers

Zoho Mail is your sending and receiving mailbox. These services check whether a prospect's address is deliverable. Connecting Zoho does not verify addresses you found; without a verifier they stay and are never sent.

Optional

LinkedIn

For automated LinkedIn prospecting. Harvey logs in and searches like a human.

Cloudflare

Optional deep website crawling with JavaScript rendering during product training. Cloudflare Browser Run has a free tier with usage limits.

Controls

Start and stop Harvey's heartbeat loop, and watch what it's doing.

Agent

Stopped

Recent logs

No logs yet. Start Harvey to see activity.

Help

What Harvey is, how it works, and how to fix the usual problems.

What is Harvey?

Harvey is an autonomous AI sales agent. Once set up, Harvey runs on its own: finds people who match your ideal customer, writes personalized cold emails, sends them through your email platform, reads every reply, handles objections, and works toward booking a meeting. You review everything through this dashboard.

Harvey runs on your Claude Max subscription (or, if you opt in, your ChatGPT plan through Codex), so there are no extra AI costs. Everything stays on your machine in one folder.

Getting started

There are three things to do:

1. Go to the Settings tab and connect an email provider (Gmail recommended)
2. Train Harvey on your product (through Claude or the command line)
3. Go to the Controls tab and click Start

Today shows exactly what's done and what still needs to happen.

Where everything lives

Everything Harvey needs is inside this one project folder. Nothing is stored elsewhere.

.envYour API keys and credentials (never shared or committed)
harvey.yamlYour product info, target customers, and behavior settings
skills/Sales knowledge files. Edit these to change how Harvey writes and sells.
skills/product_knowledge.mdEverything Harvey knows about your product (auto-generated from training)
prompts/Prompt templates for each agent. Advanced customization.
data/harvey.dbDatabase with all prospects, campaigns, and conversations
data/harvey.logLog file showing what Harvey is doing

Getting your API keys

Instantly API key (legacy)

Instantly is the legacy sending option; Gmail or SMTP is recommended.

1. Sign up at instantly.ai (you need the Growth plan for API access)

2. Go to Settings > Integrations

3. Copy your API key

4. Paste it in the Settings tab here

LinkedIn credentials (optional)

If you want Harvey to find prospects on LinkedIn, enter your LinkedIn email and password. Harvey uses a real browser to search LinkedIn like a human would, with random delays and rate limits to avoid detection.

If you skip this, Harvey will find prospects through Google searches and company website scraping instead.

Cloudflare Browser Run (optional)

This is only used during product training (when Harvey crawls your website to learn about your product). It handles JavaScript-heavy websites that a basic crawler can't read.

1. Sign in at Cloudflare. Browser Run has a free tier.

2. Open My Profile > API Tokens > Create Token > Create Custom Token.

3. Grant Account > Browser Run > Edit for the account you will use, then create and copy the token.

4. In Cloudflare, search for “Copy account ID”; enter that ID and the token in Settings > Cloudflare.

Without this, Harvey uses a built-in crawler that works fine for most websites but can't render JavaScript.

Common issues

"command not found: harvey"
You need to activate the virtual environment first: source .venv/bin/activate
Instantly API returns 401
Your API key is wrong, or you need the Growth plan (the free plan doesn't include API access). Double-check the key in Settings > Integrations in your Instantly dashboard.
Claude headless mode fails
Make sure you've run claude login in your terminal and have an active Claude Max subscription. Harvey uses your existing subscription, not a separate API key.
Codex calls fail
With brain.provider: codex, set brain.model to an available model ID, including Luna, Sol, or Terra (for example gpt-6.1-sol), or leave it blank to select a listed model. Harvey runs these models without tools; gpt-5.5 also remains supported when present in your account's catalog. Run codex login and choose "Sign in with ChatGPT" (API-key logins are refused). Harvey never renews your Codex login: if the log says it has expired or is due for renewal, use Codex once or run codex login. Harvey needs Codex CLI 0.159.3 on macOS or Linux (Codex isn't supported on Windows; use Claude there) and refuses other versions. While Codex can't be used, Harvey pauses (Today shows "Codex is paused" and why), leaves replies and queued emails untouched, and resumes once it's fixed; harvey status --check checks on demand. If the log says isolation could not be verified, a Codex config layer is forcing a tool, hook, MCP server or custom endpoint back on — Harvey refuses to send prompts until it is removed. Harvey never falls back to Claude on its own.
Harvey isn't finding prospects
Check that your ICP (ideal customer profile) in harvey.yaml has realistic titles, industries, and geography. If LinkedIn is set up, check that the credentials are correct. Check the Activity tab to see what Harvey has been trying to do.