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.
~/.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.First-time setup
- Install GhostReach and activate the key from the license email.
- Run
ghostreach login. Sign into LinkedIn in the dedicated GhostReach Chrome window. - Run
ghostreach list. Choose Sales Navigator or CSV. - Run
ghostreach messages. Replace both example messages with your own words. - Run
ghostreach run --dry. Review the preview; it sends nothing. - Run
ghostreach start. The default schedule is 9:00 AM local time.
ghostreach login for that window.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_urlis required.nameis 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 listswitches the active campaign; prior local history remains.
Every GhostReach command
ghostreach licenseno LinkedIn actionShows 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 outreachOpens 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 setupShows the current source and offers Sales Navigator or CSV. Direct URL/path arguments and --name "Campaign" are supported. Importing never sends anything.
ghostreach messageslocal setupCreates 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 nothingRuns 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 sendsRuns 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 scheduleInstalls 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 switchStops 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 reportShows 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 doctordiagnosticsChecks 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 guideOpens the visual quick-start guide shipped with the app.
ghostreach help / ghostreach versioninformationPrints the short command reference or installed version. The full current guide is this page: ghostreach.fly.dev/help.
Limits and timing
- 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.
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 stopto stop scheduling.
Common setup and runtime issues
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.
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 path | Contains |
|---|---|
~/.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 |
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.