Help & FAQ

Everything you need, without guessing.

Installation, every command, CSV and Sales Navigator setup, real limits, browser behavior, common errors, and safe recovery steps.

Something is not workingStart with ghostreach doctor Set up CSV or Sales NavigatorFormats, validation and re-imports
Stop everything nowghostreach stop is the kill switch
Start here

Requirements and installation

  • A Mac (Apple Silicon or Intel), or Windows 11 x64 (alpha).
  • Google Chrome.
  • A LinkedIn account.
  • Either a Sales Navigator people list or a CSV of public LinkedIn profile URLs.
# macOS Terminal
curl -fsSL https://ghostreach.fly.dev/install | bash

# Windows 11 x64 PowerShell
irm https://ghostreach.fly.dev/install.ps1 | iex

macOS installs to ~/Applications/GhostReach and installs/upgrades Node.js when needed. Windows installs per-user to %LOCALAPPDATA%\Programs\GhostReach and uses the verified private Node runtime inside the package. Both prepare the browser driver, add the ghostreach command, and ask where to email your free 30-day license.

Safe to rerun: rerunning the installer updates the app. Your campaign state stays under ~/.ghostreach on macOS or %LOCALAPPDATA%\GhostReach on Windows and is not removed. Windows also preserves the registered daily schedule; if a pass is active, the installer changes nothing and asks you to retry afterward.
Read before pasting: the public install script is available at ghostreach.fly.dev/install.
Windows alpha: the current zip is hash-verified and bundles an officially signed Node runtime, but the GhostReach package itself is not yet publisher-signed. SmartScreen may warn until Authenticode signing and reputation are in place.
One time

First-time setup

  1. Install GhostReach and activate the key from the license email.
  2. Run ghostreach login. Sign into LinkedIn in the dedicated GhostReach Chrome window.
  3. Run ghostreach list. Choose Sales Navigator or CSV.
  4. Run ghostreach messages. Replace both example messages with your own words.
  5. Run ghostreach run --dry. Review the preview; it sends nothing.
  6. Run ghostreach start. The default schedule is 9:00 AM local time.
The browser is separate: being signed into your everyday Chrome does not sign in the dedicated GhostReach profile. Use ghostreach login for that window.
Audience

Sales Navigator or CSV

Option 1: Sales Navigator

ghostreach list https://www.linkedin.com/sales/lists/people/1234567890
ghostreach list https://www.linkedin.com/sales/lists/people/1234567890 --name "Founders"

Use a saved people list URL. Company lists, search-result URLs, and individual profile URLs are rejected with an explanation.

Option 2: CSV profile URLs

linkedin_url,name
https://www.linkedin.com/in/jane-doe,Jane Doe
https://www.linkedin.com/in/john-doe,John Doe
ghostreach list /Users/you/Desktop/leads.csv
ghostreach list ~/Desktop/leads.csv --name "Conference leads"
  • linkedin_url is required. name is optional but recommended.
  • Only public https://www.linkedin.com/in/... URLs are accepted.
  • Quoted CSV values and normal comma escaping are supported.
  • Duplicate profile URLs are ignored and reported.
  • Any invalid row aborts the entire import with row numbers. GhostReach never runs a partial audience silently.
  • Re-importing the same CSV adds or refreshes leads without deleting outreach history.
  • Only one campaign is active at a time. Running ghostreach list switches the active campaign; prior local history remains.
CSV reach varies: regular LinkedIn may show Follow only, require an email, or hide Connect for distant profiles. GhostReach skips those people and never guesses an email.
Reference

Every GhostReach command

ghostreach licenseno LinkedIn action

Shows the current license, or asks for an email when no license is active. You can also use ghostreach license you@example.com, paste a signed token, or provide a license-file path.

ghostreach loginno outreach

Opens the dedicated Chrome profile, waits for you to sign into LinkedIn, then verifies the session is a real non-automated Chrome. The session is remembered in that profile.

ghostreach listlocal setup

Shows the current source and offers Sales Navigator or CSV. Direct URL/path arguments and --name "Campaign" are supported. Importing never sends anything.

ghostreach messageslocal setup

Creates or validates one first-message file and one follow-up file. Use {firstName} for first-name personalization. Run ghostreach messages --show to validate without opening an editor.

ghostreach run --drysends nothing

Runs the real browser and selection logic as a preview. It may navigate profiles and count those views locally, but it does not send a connection or message.

ghostreach runlive sends

Runs one live pass now: connections, read-only reply sync, first messages, then eligible follow-ups. Use --dry whenever you only want a preview.

ghostreach startenables schedule

Installs the daily schedule (LaunchAgent on macOS; Task Scheduler on Windows), opens the dedicated browser, and prints the next run and current status. Default: 09:00 local. Choose another time with ghostreach start --at 08:30.

ghostreach stopkill switch

Stops any active scheduled task, unregisters and verifies the platform scheduler, removes its local schedule files, and closes only the dedicated GhostReach browser. It is safe to run repeatedly.

ghostreach statuslocal report

Shows license, schedule, lead source, funnel totals, replies, and today's send counts. On Windows it also shows the next Task Scheduler run and warns when the last task did not complete successfully. It reads local state and performs no LinkedIn action.

ghostreach doctordiagnostics

Checks license, Chrome, dedicated browser session, LinkedIn login, lead source, and both message templates. This is the first command to run when setup or a scheduled pass is not working.

ghostreach welcomeopens guide

Opens the visual quick-start guide shipped with the app.

ghostreach help / ghostreach versioninformation

Prints the short command reference or installed version. The full current guide is this page: ghostreach.fly.dev/help.

Built-in governors

Limits and timing

20-30date-seeded connection target; hard daily cap 30
10-20first-message target; hard daily cap 20
10-20follow-up target; hard daily cap 20
60shared daily write actions across connects + messages
60daily profile-view budget
500maximum pending invitations before connects stop
  • Daily targets are deterministic for that date. Rerunning tops up toward the same target; it does not pick a new higher target.
  • First messages send only to accepted 1st-degree connections that have no prior conversation.
  • Messages use the local Mon-Fri 08:00-18:00 window.
  • Follow-ups use the narrower Mon-Fri 08:00-13:00 window, wait at least 3 days, and are limited to one per thread.
  • Connections are not product-time-gated, but the normal schedule starts around the configured morning time.
  • Actions are paced in irregular small bursts with randomized gaps and breaks.
  • LinkedIn's own invitation limit, challenge, or restriction always stops the run immediately.
Targets are not promises: accepted-connection supply, working-hour windows, unavailable Connect buttons, pending limits, profile views, and LinkedIn's own controls can make a day quieter.
Fail safe

What GhostReach refuses to guess

  • No live action occurs during run --dry.
  • A connection/message is recorded as sent only after the UI confirms it.
  • Post-send uncertainty is never retried automatically, avoiding duplicate sends.
  • Existing inbound or outbound conversation blocks a first message.
  • A detected reply blocks follow-ups, including conversations started manually.
  • Email-required connection walls are skipped; GhostReach never invents an email.
  • Checkpoint, challenge, restriction, or invitation-limit pages halt the entire pass.
  • Closing Chrome is not the kill switch: a scheduled run can reopen the same profile. Use ghostreach stop to stop scheduling.
Fixes

Common setup and runtime issues

First step: run ghostreach doctor. Its output is designed to name the failed check and the next action.
node:sqlite or an old Node.js error

Rerun the latest installer. It installs/upgrades Node to 22.5+ and the launcher independently refuses an incompatible Node:

curl -fsSL https://ghostreach.fly.dev/install | bash
ghostreach: command not found

Open a new terminal after installation. If it still fails, rerun the installer. macOS: ~/Applications/GhostReach/bin/ghostreach. Windows: %LOCALAPPDATA%\Programs\GhostReach\bin\ghostreach.cmd.

The license email did not arrive

Check spam and verify the address. Retry with ghostreach license you@example.com. A successful request normally arrives within a minute.

I am signed into LinkedIn, but GhostReach says signed out

Your normal Chrome and the dedicated GhostReach Chrome are separate profiles. Run ghostreach login and sign in inside the window it opens.

The GhostReach browser was closed

ghostreach start and scheduled runs reopen the same persistent profile. If LinkedIn has not expired the session, it remains signed in. If it has, run ghostreach login.

My Sales Navigator list is rejected

Use a saved people-list URL exactly like https://www.linkedin.com/sales/lists/people/1234567890. Search pages, company lists, and individual /in/ profiles are different surfaces.

My CSV is rejected

The required header is linkedin_url; optional name is recommended. The error includes row numbers. Fix every invalid row and rerun: no rows are imported when validation fails.

A CSV profile never receives a connection

Regular LinkedIn may expose only Follow, require an email, or hide Connect for distant/out-of-network people. GhostReach safely skips those profiles. Sales Navigator can expose a different connection surface.

Messages are "not ready"

Run ghostreach messages, replace the example text in both files, save, then run ghostreach messages --show. Placeholder/sample copy is deliberately blocked.

run --dry says the dedicated browser is signed out

The check is intentional and read-only. Run ghostreach login. A dry run still needs a real LinkedIn session to preview the actual pages.

A scheduled run did not send messages

First messages require accepted connections and run Mon-Fri 08:00-18:00. Follow-ups require a prior first message, no reply, at least 3 days of age, and the Mon-Fri 08:00-13:00 window. Run ghostreach status and ghostreach doctor; Windows reports the last Task Scheduler failure code.

The computer was asleep at the scheduled time

Keep it powered around the configured time. macOS may launch the missed job after wake; Windows uses StartWhenAvailable and WakeToRun where system policy permits. The date-seeded plan safely tops up instead of oversending.

LinkedIn showed a checkpoint, restriction, or weekly limit

GhostReach stops the pass and does not retry through it. Resolve the prompt manually in the dedicated browser. Do not keep rerunning until LinkedIn is clear.

I need to stop everything immediately

Run ghostreach stop. It terminates an active scheduled task, verifies the platform scheduler is removed, clears local schedule files, and closes only the dedicated GhostReach browser. Run it again safely if you want confirmation.

Where are diagnostic logs?

macOS: ~/.ghostreach/data/logs/. Windows: %LOCALAPPDATA%\GhostReach\data\logs\. Screenshots use the adjacent screenshots folder. Everything remains local.

How do I create a support bundle?

Run ghostreach support-bundle. It creates a local redacted zip with product diagnostics and recent audit logs. It excludes the lead database, templates, license, Chrome profile, screenshots, email, paths, URLs, and message bodies, and uploads nothing.

Local first

Privacy and local data

The installed app stores its configuration, lead database, logs, screenshots, templates, and dedicated Chrome profile under ~/.ghostreach on macOS or %LOCALAPPDATA%\GhostReach on Windows. LinkedIn contacts, message text, cookies, and browser session are not uploaded to GhostReach.

The website receives the email used to issue a license and uses first-party website analytics for page/install/download/error counts. Installed-app commands and LinkedIn run details are local only.

Local pathContains
~/.ghostreach/config.json
%LOCALAPPDATA%\GhostReach\config.json
Active source and campaign settings
~/.ghostreach/data/ghostreach.db
%LOCALAPPDATA%\GhostReach\data\ghostreach.db
Lead and outreach state
~/.ghostreach/templates/
%LOCALAPPDATA%\GhostReach\templates\
Your message templates
~/.ghostreach/data/logs/
%LOCALAPPDATA%\GhostReach\data\logs\
Structured operational logs
~/.ghostreach/chrome-profile/
%LOCALAPPDATA%\GhostReach\chrome-profile\
Dedicated browser profile and LinkedIn session
FAQ

General questions

Can I use GhostReach without Sales Navigator?

Yes. Use a CSV of public LinkedIn /in/ profile URLs. Connections, reply detection, first messages, and follow-ups use the same local funnel and safety gates.

Can I use multiple CSVs or campaigns?

GhostReach has one active campaign at a time. You can switch sources with ghostreach list; prior list and outreach history remains in the local database.

Does changing a CSV delete anyone?

No. Re-import adds or updates leads and preserves history. Removing a row from the file does not erase that person's existing local record.

Does GhostReach send InMail?

No. It uses normal connection requests and 1st-degree messages. It does not guess emails or bypass unavailable LinkedIn surfaces.

Does closing the browser stop the schedule?

No. A scheduled run can reopen the same dedicated profile. Use ghostreach stop for a verified stop.

Can I run it more than once in a day?

Yes. The daily targets are stable for the calendar date and all successful sends are recorded, so a rerun tops up only what remains.

Will it message someone who already replied?

No. It reads threads before first messages and follow-ups, and performs a read-only reply-sync pass that also catches manual conversations.

Is automation risk-free?

No. LinkedIn's agreement restricts automation and any automated use can lead to warnings or account restrictions. GhostReach reduces risk with conservative limits, real Chrome, randomized pacing, verification, and immediate halt behavior, but cannot eliminate it.