Getting Started with lhremote

This guide walks you through a complete first-use scenario: from installation to running your first campaign.

Prerequisites

Before you begin, make sure you have:

Install lhremote

Install globally via npm:

npm install -g lhremote

Or run directly with npx (no install needed):

npx lhremote --help

Step 1: Launch LinkedHelper

Start the LinkedHelper application. You can launch it manually from your desktop, or use lhremote:

lhremote launch-app

This starts LinkedHelper with remote debugging enabled so lhremote can communicate with it.

Step 2: Find the running app

Verify that lhremote can detect LinkedHelper:

lhremote find-app

You 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.

Step 3: Start a LinkedHelper instance

LinkedHelper needs an active instance for a LinkedIn account. First, list available accounts:

lhremote list-accounts

Then start an instance. If you have a single account, no account ID is needed:

lhremote start-instance

If 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.

Step 4: Check instance status

Confirm everything is connected:

lhremote check-status

This shows the connection status, running instances, and database health. Wait until the instance shows as fully initialized before proceeding.

Step 5: Create a campaign

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: VisitAndExtract

Then create the campaign:

lhremote campaign-create --file my-campaign.yaml

The output includes the new campaign's ID. Note it for the next steps.

Tip: Use lhremote describe-actions to 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>.

Rate Limiting

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.

Example: rate-limited campaign

version: "1"
name: "Profile Enrichment (safe)"
description: "Visit and extract with conservative pacing"
settings:
  cooldownMs: 90000
  maxActionsPerRun: 5
actions:
  - type: VisitAndExtract

Both 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.

Step 6: Import targets

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.txt

Previously imported URLs are skipped automatically, so the command is safe to run multiple times.

Step 7: Run the campaign

Start the campaign:

lhremote campaign-start <campaignId>

LinkedHelper will begin processing the target profiles according to your action chain.

Step 8: Check campaign results

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-results

When you are done, stop the campaign:

lhremote campaign-stop <campaignId>

Using lhremote with Claude Code (plugin)

The easiest way to use lhremote with Claude Code is via the plugin system. This installs the MCP server and workflow skill automatically.

Install the plugin

From within Claude Code, add the marketplace and install:

/plugin marketplace add alexey-pelykh/lhremote
/plugin install lhremote@lhremote

This sets up:

Verify the installation

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

Using lhremote with Claude Desktop (MCP)

lhremote includes a built-in MCP server that lets AI assistants like Claude control LinkedHelper directly.

Configure Claude Desktop

Add lhremote to your Claude Desktop configuration file (claude_desktop_config.json):

{
    "mcpServers": {
        "lhremote": {
            "command": "npx",
            "args": ["lhremote", "mcp"]
        }
    }
}

What you can ask Claude

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.

Next steps