{
  "schemaVersion": "1.0",
  "item": {
    "slug": "linkedin-bulk-connect",
    "name": "LinkedIn Bulk Connect",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/10Madh/linkedin-bulk-connect",
    "canonicalUrl": "https://clawhub.ai/10Madh/linkedin-bulk-connect",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/linkedin-bulk-connect",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linkedin-bulk-connect",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/browser-workflow.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "linkedin-bulk-connect",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-05T00:54:05.123Z",
      "expiresAt": "2026-05-12T00:54:05.123Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linkedin-bulk-connect",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=linkedin-bulk-connect",
        "contentDisposition": "attachment; filename=\"linkedin-bulk-connect-1.1.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "linkedin-bulk-connect"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/linkedin-bulk-connect"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/linkedin-bulk-connect",
    "agentPageUrl": "https://openagent3.xyz/skills/linkedin-bulk-connect/agent",
    "manifestUrl": "https://openagent3.xyz/skills/linkedin-bulk-connect/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/linkedin-bulk-connect/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "LinkedIn Connect",
        "body": "Automates sending LinkedIn connection requests from a list and tracks results in a data file."
      },
      {
        "title": "⚠️ Pre-flight Checklist — Confirm Before Starting",
        "body": "Before doing anything else, confirm all of the following with the user. Do not proceed until each item is confirmed."
      },
      {
        "title": "1. Data File",
        "body": "Ask the user to provide their spreadsheet/CSV/TSV file and confirm it has (or can have) these columns:\n\nPerson/Founder Name — full name of the person to connect with\nCompany/Brand Name — their company or brand (used for search fallback)\nLinkedIn Profile URL — optional but highly recommended; reduces automation footprint\n\nIf the file lacks any column, tell the user which columns are missing and offer to add them."
      },
      {
        "title": "2. Browser Setup",
        "body": "Ask which browser setup they're using:\n\nOption A — Chrome Browser Relay (recommended for accounts flagged for automation)\n\nUser must have the OpenClaw Browser Relay Chrome extension installed\nUser opens LinkedIn in their regular Chrome browser and clicks the OpenClaw Relay toolbar icon on that tab (badge turns ON)\nUse profile=\"chrome\" for all browser tool calls in this mode\n\nOption B — OpenClaw Isolated Browser (openclaw profile)\n\nOpenClaw manages a separate Chrome instance\nOn first use, navigate to https://www.linkedin.com and let the user log in; cookies persist across sessions\nUse profile=\"openclaw\" for all browser tool calls in this mode\n\nConfirm which option they've set up. Default to Option A (Chrome Relay) if the user's account has been flagged or warned about automation."
      },
      {
        "title": "3. Ready Check",
        "body": "Only proceed once the user says:\n\n✅ File is ready and accessible\n✅ Browser is open with LinkedIn logged in (and relay is attached if Option A)"
      },
      {
        "title": "Browser Profile",
        "body": "Set the profile variable based on user's choice in the Pre-flight Checklist:\n\nOption A: profile=\"chrome\" — reuse the relay-attached tab; get targetId via browser action=tabs\nOption B: profile=\"openclaw\" — OpenClaw-managed isolated Chrome instance\n\nDo not mix profiles mid-run. Pick one and use it consistently for every browser tool call."
      },
      {
        "title": "Data File Setup",
        "body": "Ensure the tracking file has a Connection Status column. If missing, add it:\n\nimport csv\nrows = []\nwith open('file.tsv', 'r') as f:\n    reader = csv.DictReader(f, delimiter='\\t')\n    fieldnames = reader.fieldnames + ['Connection Status']\n    rows = list(reader)\nwith open('file.tsv', 'w', newline='') as f:\n    writer = csv.DictWriter(f, fieldnames=fieldnames, delimiter='\\t')\n    writer.writeheader()\n    for row in rows:\n        row['Connection Status'] = ''\n        writer.writerow(row)"
      },
      {
        "title": "Three-Tier Profile Discovery (Priority Order)",
        "body": "Always try in this order. Move to the next tier only if the current one fails."
      },
      {
        "title": "Tier 1 — Direct LinkedIn URL (fastest, zero ambiguity)",
        "body": "Navigate directly to the LinkedIn profile URL from the data file.\n\n✅ URL loads → correct profile, proceed to connect\n❌ Returns 404 → escalate to Tier 2\nSkip Tier 1 if no URL is in the data file for this person"
      },
      {
        "title": "Tier 2 — Google Search (reliable fallback, preserves accuracy)",
        "body": "Search Google for \"Founder Name\" \"Brand/Company\" linkedin.\n\nNavigate to: https://www.google.com/search?q=<Name>+<Company>+linkedin\nFind the LinkedIn profile link in results (usually first result), click it\nOnce on the profile, proceed to Connect step\n⚠️ Only escalate to Tier 3 if Google can't find the right person or returns no LinkedIn result"
      },
      {
        "title": "Tier 3 — LinkedIn People Search (last resort)",
        "body": "Run a LinkedIn people search for the founder + brand directly inside LinkedIn.\n\nNavigate to: https://www.linkedin.com/search/results/people/?keywords=<Name>+<Company>\nLook for inline Connect buttons first; otherwise open the profile from search results\nConfirm name + headline/company match before connecting\n❌ No trustworthy match → mark Profile Not Found\n\nSee references/browser-workflow.md for detailed browser steps for each tier."
      },
      {
        "title": "Connecting on a Profile",
        "body": "Once on the correct profile, two patterns exist:\n\nPattern A - Direct Connect button visible on profile → click it → confirm dialog → Send without a note\n\nPattern B - Follow mode (no Connect button, only Follow + Message + More) → click More actions → use selector .artdeco-dropdown__content--is-open to get dropdown → click Invite [Name] to connect → confirm dialog → Send without a note\n\nIf neither Connect nor Invite is available → mark Follow Only."
      },
      {
        "title": "Status Values",
        "body": "StatusMeaningRequest SentConnection request sent this sessionAlready Connected1st degree - no action neededPendingRequest already sent previouslyFollow OnlyNo Connect option available on this profileProfile Not FoundAll three tiers failedSkippedIntentionally skipped"
      },
      {
        "title": "Multi-founder Rows",
        "body": "When a TSV row has multiple founders, track per-founder status separated by |:\n\nFounder1Slug: Request Sent | Founder2Slug: Already Connected"
      },
      {
        "title": "Rate Limiting & Anti-Detection",
        "body": "⚠️ LinkedIn flags accounts that jump directly between profile URLs. Always visit the feed between profiles — no exceptions.\n\nNavigate to /feed/ before every single profile, without exception. See references/browser-workflow.md for the exact call. This is the primary anti-detection measure.\nAdd a short natural pause (2–4 seconds) after loading the feed before navigating to the next profile.\nIf >3 consecutive clean URLs return 404, pause for 10 seconds on the feed before continuing (then fall back to Google/LinkedIn search).\nDo not open new browser tabs — the relay breaks; reuse the same attached tab for every action.\nAim for no more than 20–25 connection requests per session. Stop and tell the user if you're approaching this limit."
      },
      {
        "title": "Saving Progress",
        "body": "Use a linkedin_progress.json sidecar file:\n\n{ \"statuses\": { \"https://www.linkedin.com/in/username/\": \"Request Sent\" } }\n\nUpdate the TSV from this dict every 10 profiles or at the end."
      },
      {
        "title": "References",
        "body": "references/browser-workflow.md - Detailed browser steps for all three tiers and both connect patterns"
      }
    ],
    "body": "LinkedIn Connect\n\nAutomates sending LinkedIn connection requests from a list and tracks results in a data file.\n\n⚠️ Pre-flight Checklist — Confirm Before Starting\n\nBefore doing anything else, confirm all of the following with the user. Do not proceed until each item is confirmed.\n\n1. Data File\n\nAsk the user to provide their spreadsheet/CSV/TSV file and confirm it has (or can have) these columns:\n\nPerson/Founder Name — full name of the person to connect with\nCompany/Brand Name — their company or brand (used for search fallback)\nLinkedIn Profile URL — optional but highly recommended; reduces automation footprint\n\nIf the file lacks any column, tell the user which columns are missing and offer to add them.\n\n2. Browser Setup\n\nAsk which browser setup they're using:\n\nOption A — Chrome Browser Relay (recommended for accounts flagged for automation)\n\nUser must have the OpenClaw Browser Relay Chrome extension installed\nUser opens LinkedIn in their regular Chrome browser and clicks the OpenClaw Relay toolbar icon on that tab (badge turns ON)\nUse profile=\"chrome\" for all browser tool calls in this mode\n\nOption B — OpenClaw Isolated Browser (openclaw profile)\n\nOpenClaw manages a separate Chrome instance\nOn first use, navigate to https://www.linkedin.com and let the user log in; cookies persist across sessions\nUse profile=\"openclaw\" for all browser tool calls in this mode\n\nConfirm which option they've set up. Default to Option A (Chrome Relay) if the user's account has been flagged or warned about automation.\n\n3. Ready Check\n\nOnly proceed once the user says:\n\n✅ File is ready and accessible\n✅ Browser is open with LinkedIn logged in (and relay is attached if Option A)\nBrowser Profile\n\nSet the profile variable based on user's choice in the Pre-flight Checklist:\n\nOption A: profile=\"chrome\" — reuse the relay-attached tab; get targetId via browser action=tabs\nOption B: profile=\"openclaw\" — OpenClaw-managed isolated Chrome instance\n\nDo not mix profiles mid-run. Pick one and use it consistently for every browser tool call.\n\nData File Setup\n\nEnsure the tracking file has a Connection Status column. If missing, add it:\n\nimport csv\nrows = []\nwith open('file.tsv', 'r') as f:\n    reader = csv.DictReader(f, delimiter='\\t')\n    fieldnames = reader.fieldnames + ['Connection Status']\n    rows = list(reader)\nwith open('file.tsv', 'w', newline='') as f:\n    writer = csv.DictWriter(f, fieldnames=fieldnames, delimiter='\\t')\n    writer.writeheader()\n    for row in rows:\n        row['Connection Status'] = ''\n        writer.writerow(row)\n\nThree-Tier Profile Discovery (Priority Order)\n\nAlways try in this order. Move to the next tier only if the current one fails.\n\nTier 1 — Direct LinkedIn URL (fastest, zero ambiguity)\n\nNavigate directly to the LinkedIn profile URL from the data file.\n\n✅ URL loads → correct profile, proceed to connect\n❌ Returns 404 → escalate to Tier 2\nSkip Tier 1 if no URL is in the data file for this person\nTier 2 — Google Search (reliable fallback, preserves accuracy)\n\nSearch Google for \"Founder Name\" \"Brand/Company\" linkedin.\n\nNavigate to: https://www.google.com/search?q=<Name>+<Company>+linkedin\nFind the LinkedIn profile link in results (usually first result), click it\nOnce on the profile, proceed to Connect step\n⚠️ Only escalate to Tier 3 if Google can't find the right person or returns no LinkedIn result\nTier 3 — LinkedIn People Search (last resort)\n\nRun a LinkedIn people search for the founder + brand directly inside LinkedIn.\n\nNavigate to: https://www.linkedin.com/search/results/people/?keywords=<Name>+<Company>\nLook for inline Connect buttons first; otherwise open the profile from search results\nConfirm name + headline/company match before connecting\n❌ No trustworthy match → mark Profile Not Found\n\nSee references/browser-workflow.md for detailed browser steps for each tier.\n\nConnecting on a Profile\n\nOnce on the correct profile, two patterns exist:\n\nPattern A - Direct Connect button visible on profile → click it → confirm dialog → Send without a note\n\nPattern B - Follow mode (no Connect button, only Follow + Message + More) → click More actions → use selector .artdeco-dropdown__content--is-open to get dropdown → click Invite [Name] to connect → confirm dialog → Send without a note\n\nIf neither Connect nor Invite is available → mark Follow Only.\n\nStatus Values\nStatus\tMeaning\nRequest Sent\tConnection request sent this session\nAlready Connected\t1st degree - no action needed\nPending\tRequest already sent previously\nFollow Only\tNo Connect option available on this profile\nProfile Not Found\tAll three tiers failed\nSkipped\tIntentionally skipped\nMulti-founder Rows\n\nWhen a TSV row has multiple founders, track per-founder status separated by |:\n\nFounder1Slug: Request Sent | Founder2Slug: Already Connected\n\nRate Limiting & Anti-Detection\n\n⚠️ LinkedIn flags accounts that jump directly between profile URLs. Always visit the feed between profiles — no exceptions.\n\nNavigate to /feed/ before every single profile, without exception. See references/browser-workflow.md for the exact call. This is the primary anti-detection measure.\nAdd a short natural pause (2–4 seconds) after loading the feed before navigating to the next profile.\nIf >3 consecutive clean URLs return 404, pause for 10 seconds on the feed before continuing (then fall back to Google/LinkedIn search).\nDo not open new browser tabs — the relay breaks; reuse the same attached tab for every action.\nAim for no more than 20–25 connection requests per session. Stop and tell the user if you're approaching this limit.\nSaving Progress\n\nUse a linkedin_progress.json sidecar file:\n\n{ \"statuses\": { \"https://www.linkedin.com/in/username/\": \"Request Sent\" } }\n\n\nUpdate the TSV from this dict every 10 profiles or at the end.\n\nReferences\nreferences/browser-workflow.md - Detailed browser steps for all three tiers and both connect patterns"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/10Madh/linkedin-bulk-connect",
    "publisherUrl": "https://clawhub.ai/10Madh/linkedin-bulk-connect",
    "owner": "10Madh",
    "version": "1.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/linkedin-bulk-connect",
    "downloadUrl": "https://openagent3.xyz/downloads/linkedin-bulk-connect",
    "agentUrl": "https://openagent3.xyz/skills/linkedin-bulk-connect/agent",
    "manifestUrl": "https://openagent3.xyz/skills/linkedin-bulk-connect/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/linkedin-bulk-connect/agent.md"
  }
}