Skip to main content

Installation

”command not found: deepline”

Your shell cannot find the deepline binary. This usually means the install directory is not on your PATH. Most common cause: You installed Deepline but did not reload your shell configuration.
If which deepline returns nothing, ask your agent to follow the installation guide for the current environment:
For a direct terminal repair:
On macOS with Homebrew: If you installed via a non-standard method, check that /usr/local/bin or ~/.local/bin is in your PATH:

npm install hangs or fails

Most common cause: Corporate firewalls, VPNs, or proxy servers blocking npm downloads.
If you are behind a proxy, set the standard environment variables before installing:
If deepline is still not found after install, restart your terminal and make sure npm’s global bin directory is on your PATH.

Authentication

CLI auth works, but a raw HTTP request is unauthorized

deepline auth status does not export DEEPLINE_API_KEY to the current shell. The command confirms that the CLI can use stored credentials for its configured host. Use the CLI command when one exists. CLI authentication does not authenticate a separate curl, Python, or JavaScript request. If you need a raw HTTP request, use the documented API authentication procedure for the endpoint. Verify the target host and workspace. Do not print, paste, or log a stored key.

”Missing DEEPLINE_API_KEY. Run: deepline auth register”

The CLI requires an API key for every authenticated command. This error means no key was found in your environment.
After completing the browser flow, verify your connection:
You should see Status: active and your workspace name. If the browser flow does not complete: Some email security tools (Mimecast, Barracuda, etc.) intercept magic links and consume them before you can click. If you see Status: not connected after clicking the link:
Open the link in a private/incognito browser window to bypass email security scanners.

”Status: unauthorized” after authenticating

The CLI returned a 401 or 403 when checking your credentials.
Common causes:
  1. Your API key expired or was rotated by an org admin.
  2. You were removed from the workspace. Ask your org admin to re-invite you.
  3. You are authenticated to the wrong workspace. Run deepline auth status and check the Workspace field.

Auth status returns “Auth status error (status …)”

A server-side issue prevented the auth check. Retry after a few seconds:
If the error persists, check status.deepline.com for service incidents.

Enrichment

”No results” for contacts I know exist

Most common cause: A single provider does not have coverage for your target contacts. Use waterfall enrichment across multiple providers instead.
Provider coverage varies by geography, industry, and seniority. The waterfall approach achieves 70-80% email coverage at 1-3 cents per contact by starting with the cheapest providers and only hitting expensive ones for gaps.

Enrichment runs but emails bounce

Most common cause: Enriched emails were not validated before sending. Add a validation step after enrichment:
Email validation is deterministic and catches invalid, disposable, and catch-all addresses before they reach your sequencer. Always validate before pushing to outbound campaigns. Note: The validation pipeline is being upgraded from non-deterministic to fully deterministic processing. If you see inconsistent validation results, re-run validation on the same list — the pipeline-driven approach will produce stable output.

Credits consumed but no data returned

Most common cause: The provider found no match for your input, but credits are still consumed for the API call. This is standard behavior for most data providers (Apollo, PDL, etc.). To avoid wasting credits on large lists, always run a pilot first:
If the pilot returns no data, check:
  1. Your input columns are correctly mapped (column names are case-sensitive).
  2. The provider supports your target geography/industry.
  3. The provider’s API status is operational.

”Invalid JSON payload in —with spec”

The --with flag expects a valid JSON object. This error comes from malformed JSON. Most common cause: Quote escaping issues in bash. The CLI will show the exact parse error and a hint:
Fixes:
  1. Use single quotes to wrap the entire JSON, and double quotes inside:
  1. For complex specs with regex or special characters, save to a file and reference it:
  1. Allowed keys in a --with spec are: alias, tool, payload, extract_js, run_if_js. Any other key will produce:

“Invalid —with spec: alias is required” / “tool is required”

Every --with spec must include both an alias (a name for this enrichment step) and a tool (the provider to call):

“Unknown tool <tool_id>

The tool ID you specified does not exist. Check available tools:
Tool IDs are case-sensitive. Common mistakes: Apollo_People_Match (wrong) vs apollo_people_match (correct).

Rate limit errors during enrichment

When a provider rate-limits your requests, the CLI automatically retries with backoff. You will see messages indicating the rate limit rule and retry delay. If you consistently hit rate limits:
  1. Process smaller batches (fewer rows per run).
  2. If using BYOK, check your provider account’s rate limit tier.
  3. Contact support if you need higher throughput (current default is ~5 req/sec; power users like agencies may need 25-30 req/sec).

BYOK (Bring Your Own Keys)

How do I add my own API keys?

BYOK lets you use your own provider API keys for provider-side usage while Deepline manages the workflow. BYOK keys are managed in the dashboard, not the CLI:
See Bring Your Own Keys for the full setup flow. After connecting a key, enrichment calls to that provider use your key automatically.

Provider returns 401/403 with my own key

Most common cause: The key does not have the required permissions or your provider account tier does not include API access. Check these in order:
  1. Key is valid: Test the key directly against the provider’s API (e.g., curl to Apollo’s endpoint with your key).
  2. API access enabled: Some provider plans (especially free tiers) do not include API access. Check your provider dashboard.
  3. Rate limits: Your key may have a lower rate limit than Deepline’s default throughput. The CLI surfaces the rate limit error with provider and rule details.
  4. Key format: Ensure there are no trailing spaces or newlines. Re-set the key in the dashboard at https://code.deepline.com/dashboard/keys. See Bring Your Own Keys.

Claude Code / Skills

/deepline-gtm or Deepline skill not recognized in Claude Code

Most common cause: The Deepline skill is not installed or was renamed.
If the skill file exists but Claude Code does not recognize it, restart your Claude Code session. Claude Code reads skill files at session startup. Note: If you previously used a skill called “GTM Meta Skill,” it was renamed to “Deepline.” This rename can cause the skill to disappear from active sessions. Restart Claude Code after updating.

Claude Code writes incorrect Deepline commands

Most common cause: The SKILL.md file is out of date or not being read by your agent.
  1. Update to the latest version:
  1. Verify the skill file is current:
  1. Start a new Claude Code session so it picks up the updated skill file.
Known issue: Some marketing pages contain CLI command examples with incorrect syntax (e.g., shorthand --with syntax that the CLI does not accept). Always test commands from the quickstart docs, not comparison pages.

Database

”Where are my enrichment results?”

Deepline stores enrichment results in a managed Neon Postgres database. After an enrichment run completes, your data is available via SQL.
To get your database connection string for use with external tools (DBeaver, pgAdmin, Metabase, etc.):

“Missing —sql SQL”

The deepline db query command requires a --sql flag with your SQL statement:

Cannot connect to the database

Most common cause: Incorrect connection string format or network restrictions.
  1. Verify your connection string starts with postgresql:// (not postgres://, which some clients do not accept).
  2. Check your network: Neon Postgres requires outbound connections on port 5432. Corporate firewalls may block this.
  3. IP allowlisting: If your organization has IP restrictions configured, ensure your current IP is allowlisted.
  4. Auth errors (401/403): Your database credentials may have expired. Re-authenticate:

Sequencers (Instantly, Lemlist)

Push to Instantly or Lemlist fails

Most common cause: Missing or incorrect API key for the sequencer.
See Bring Your Own Keys to connect Instantly, Lemlist, and other sequencer keys. Check these in order:
  1. API key permissions: Ensure your key has write access to campaigns. Read-only keys will return 403.
  2. Campaign ID: Verify the campaign ID exists and is active in your sequencer dashboard. A deleted or paused campaign will reject pushes.
  3. Payload format: Each sequencer expects specific contact fields. Ensure your enrichment output includes at minimum email and first_name.

General Errors

”Auth error while listing tools. Check DEEPLINE_API_KEY.”

The CLI tried to fetch available integrations but your API key was rejected (401/403).

Network errors / timeouts

If commands fail with network-related errors:
  1. Check your internet connection.
  2. Check for VPN/proxy issues:
  1. Check service status: Visit status.deepline.com.

Playground backend fails to start

If you see Unable to ensure playground backend is running (exit_code=...):
  1. Check that no other process is using the playground port.
  2. Try stopping and restarting:
  1. Enable debug logging for more details:

Still stuck?

Office Hours

Join our weekly office hours (Thursdays) for live help. Bring your screen, we will debug together.

Email Support

Email team@deepline.com with your CLI version (deepline --version), the full error output, and what you were trying to do.