This guide walks you through a complete first-use scenario: from installation to running your first campaign.
Before you begin, make sure you have:
Install globally via npm:
npm install -g lhremoteOr run directly with npx (no install needed):
npx lhremote --helpStart the LinkedHelper application. You can launch it manually from your desktop, or use lhremote:
lhremote launch-appThis starts LinkedHelper with remote debugging enabled so lhremote can communicate with it.
Verify that lhremote can detect LinkedHelper:
lhremote find-appYou should see output confirming the app was found with its CDP connection details (host and port). If you get an error, make sure LinkedHelper is running.
LinkedHelper needs an active instance for a LinkedIn account. First, list available accounts:
lhremote list-accountsThen start an instance. If you have a single account, no account ID is needed:
lhremote start-instanceIf you have multiple accounts, pass the account ID from the list:
lhremote start-instance <accountId>Instance startup loads LinkedIn in the background, which may take up to 45 seconds.
Confirm everything is connected:
lhremote check-statusThis shows the connection status, running instances, and database health. Wait until the instance shows as fully initialized before proceeding.
Campaigns define what actions to perform on target LinkedIn profiles. Create a simple "visit and extract" campaign that visits profiles and collects their data.
Save this as my-campaign.yaml:
version: "1"
name: "My First Campaign"
description: "Visit profiles and extract their information"
settings:
cooldownMs: 90000
maxActionsPerRun: 5
actions:
- type: VisitAndExtractThen create the campaign:
lhremote campaign-create --file my-campaign.yamlThe output includes the new campaign's ID. Note it for the next steps.
Tip: Use
lhremote describe-actionsto explore all available action types. You can filter by category (people,messaging,engagement,crm,workflow) or get details for a specific type with--type <ActionType>.
LinkedIn monitors automated activity and may issue warnings or restrict accounts that visit too many profiles too quickly. lhremote provides two campaign settings to control pacing:
| Setting | YAML field | Scope | Default | Description |
|---|---|---|---|---|
| Cooldown | cooldownMs |
Campaign or per-action | 60 000 ms (60 s) | Minimum delay between individual profile visits |
| Max actions per run | maxActionsPerRun |
Campaign or per-action | 10 | Profiles processed per campaign execution cycle |
| Phase | Daily visits | maxActionsPerRun |
cooldownMs |
|---|---|---|---|
| Warm-up (first week) | ~50 | 5 | 90 000 |
| Cruising (no warnings) | 100–200 | 10 | 60 000 |
Start conservative and increase only after confirming no LinkedIn warnings. Warnings are easier to prevent than recover from.
version: "1"
name: "Profile Enrichment (safe)"
description: "Visit and extract with conservative pacing"
settings:
cooldownMs: 90000
maxActionsPerRun: 5
actions:
- type: VisitAndExtractBoth cooldownMs and maxActionsPerRun can be
set at the campaign level (under settings) or overridden
per action. Per-action values take priority over the campaign
default.
Tip: If you receive a LinkedIn warning, stop the campaign immediately, wait 24–48 hours, then resume with lower limits.
Add LinkedIn profile URLs as targets for your campaign:
lhremote import-people-from-urls <campaignId> \
--urls "https://www.linkedin.com/in/example-profile-1/" \
--urls "https://www.linkedin.com/in/example-profile-2/"For larger lists, put the URLs in a file (one per line) and use:
lhremote import-people-from-urls <campaignId> --urls-file targets.txtPreviously imported URLs are skipped automatically, so the command is safe to run multiple times.
Start the campaign:
lhremote campaign-start <campaignId>LinkedHelper will begin processing the target profiles according to your action chain.
Monitor progress while the campaign runs:
lhremote campaign-status <campaignId>For detailed per-action statistics:
lhremote campaign-statistics <campaignId>To see individual execution results:
lhremote campaign-status <campaignId> --include-resultsWhen you are done, stop the campaign:
lhremote campaign-stop <campaignId>The easiest way to use lhremote with Claude Code is via the plugin system. This installs the MCP server and workflow skill automatically.
From within Claude Code, add the marketplace and install:
/plugin marketplace add alexey-pelykh/lhremote
/plugin install lhremote@lhremote
This sets up:
Run /plugin and check the Installed tab
to confirm lhremote appears. Then try asking Claude Code to interact
with LinkedHelper:
Find LinkedHelper and check its status
lhremote includes a built-in MCP server that lets AI assistants like Claude control LinkedHelper directly.
Add lhremote to your Claude Desktop configuration file
(claude_desktop_config.json):
{
"mcpServers": {
"lhremote": {
"command": "npx",
"args": ["lhremote", "mcp"]
}
}
}Once configured, Claude has access to all lhremote tools. You can ask it to:
Claude handles the multi-step workflows automatically, including waiting for instance startup and checking status between operations.
lhremote describe-actions to explore action types
for more advanced campaigns (messaging, endorsements, InMail, and
more)lhremote --help or
lhremote <command> --help for detailed usage
information