{"id":"89c07fe5-3a75-401e-9dc6-08dbc8658f92","entityType":"agent","slug":"clawhub-skills-10madh-linkedin-bulk-connect","name":"linkedin-connect","canonicalUrl":"https://www.xpersona.co/agent/clawhub-skills-10madh-linkedin-bulk-connect","canonicalPath":"/agent/clawhub-skills-10madh-linkedin-bulk-connect","generatedAt":"2026-10-10T01:47:26.916Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Send LinkedIn connection requests to a list of people via browser automation and track status in a CSV/TSV file. Use when the user wants to bulk-connect with a list of people on LinkedIn (founders, speakers, leads, etc.) from a spreadsheet or list containing LinkedIn profile URLs. Handles Connect button, Follow-mode profiles, already-connected detection, stale URL fallback via LinkedIn search and Google search, and incremental status tracking. --- name: linkedin-connect description: Send LinkedIn connection requests to a list of people via browser automation and track status in a CSV/TSV file. Use when the user wants to bulk-connect with a list of people on LinkedIn (founders, speakers, leads, etc.) from a spreadsheet or list containing LinkedIn profile URLs. Handles Connect button, Follow-mode profiles, already-connected detection, stale URL fallback via","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.","installCommand":"clawhub skill install skills:10madh:linkedin-bulk-connect","sourceUrl":"https://github.com/openclaw/skills/tree/main/skills/10madh/linkedin-bulk-connect","homepage":null,"primaryLinks":[{"label":"View on ClawHub","url":"https://github.com/openclaw/skills/tree/main/skills/10madh/linkedin-bulk-connect","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":50,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Send LinkedIn connection requests to a list of people via browser automation and track status in a CSV/TSV file. Use when the user wants to bulk-connect with a "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"have","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":2,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"have","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:have|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No source adoption metrics were available."},"stars":null,"forks":null,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-02-25T06:16:28.568Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-25T06:16:28.568Z","lastIndexedAt":null,"nextCrawlAt":"2026-02-26T06:16:28.568Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install skills:10madh:linkedin-bulk-connect","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T01:47:26.916Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-skills-10madh-linkedin-bulk-connect/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"---\nname: linkedin-connect\ndescription: Send LinkedIn connection requests to a list of people via browser automation and track status in a CSV/TSV file. Use when the user wants to bulk-connect with a list of people on LinkedIn (founders, speakers, leads, etc.) from a spreadsheet or list containing LinkedIn profile URLs. Handles Connect button, Follow-mode profiles, already-connected detection, stale URL fallback via LinkedIn search and Google search, and incremental status tracking.\n---\n\n# 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\n**Before doing anything else**, confirm all of the following with the user. Do not proceed until each item is confirmed.\n\n### 1. Data File\nAsk the user to provide their spreadsheet/CSV/TSV file and confirm it has (or can have) these columns:\n- **Person/Founder Name** — full name of the person to connect with\n- **Company/Brand Name** — their company or brand (used for search fallback)\n- **LinkedIn 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\n### 2. Browser Setup\nAsk which browser setup they're using:\n\n**Option A — Chrome Browser Relay (recommended for accounts flagged for automation)**\n- User must have the OpenClaw Browser Relay Chrome extension installed\n- User opens LinkedIn in their regular Chrome browser and clicks the OpenClaw Relay toolbar icon on that tab (badge turns ON)\n- Use `profile=\"chrome\"` for all browser tool calls in this mode\n\n**Option B — OpenClaw Isolated Browser (`openclaw` profile)**\n- OpenClaw manages a separate Chrome instance\n- On first use, navigate to `https://www.linkedin.com` and let the user log in; cookies persist across sessions\n- Use `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\n### 3. Ready Check\nOnly proceed once the user says:\n- ✅ File is ready and accessible\n- ✅ Browser is open with LinkedIn logged in (and relay is attached if Option A)\n\n---\n\n## Browser Profile\n\nSet the `profile` variable based on user's choice in the Pre-flight Checklist:\n- **Option A:** `profile=\"chrome\"` — reuse the relay-attached tab; get `targetId` via `browser action=tabs`\n- **Option 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\n## Data File Setup\n\nEnsure the tracking file has a `Connection Status` column. If missing, add it:\n\n```python\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```\n\n## Three-Tier Profile Discovery (Priority Order)\n\nAlways try in this order. Move to the next tier only if the current one fails.\n\n### Tier 1 — Direct LinkedIn URL (fastest, zero ambiguity)\nNavigate directly to the LinkedIn profile URL from the data file.\n- ✅ URL loads → correct profile, proceed to connect\n- ❌ Returns 404 → escalate to Tier 2\n- Skip Tier 1 if no URL is in the data file for this person\n\n### Tier 2 — Google Search (reliable fallback, preserves accuracy)\nSearch Google for `\"Founder Name\" \"Brand/Company\" linkedin`.\n- Navigate to: `https://www.google.com/search?q=<Name>+<Company>+linkedin`\n- Find the LinkedIn profile link in results (usually first result), click it\n- Once 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\n\n### Tier 3 — LinkedIn People Search (last resort)\nRun a LinkedIn people search for the founder + brand directly inside LinkedIn.\n- Navigate to: `https://www.linkedin.com/search/results/people/?keywords=<Name>+<Company>`\n- Look for inline `Connect` buttons first; otherwise open the profile from search results\n- Confirm 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\n## Connecting on a Profile\n\nOnce on the correct profile, two patterns exist:\n\n**Pattern A - Direct Connect button** visible on profile → click it → confirm dialog → `Send without a note`\n\n**Pattern 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\n## Status Values\n\n| Status | Meaning |\n|---|---|\n| `Request Sent` | Connection request sent this session |\n| `Already Connected` | 1st degree - no action needed |\n| `Pending` | Request already sent previously |\n| `Follow Only` | No Connect option available on this profile |\n| `Profile Not Found` | All three tiers failed |\n| `Skipped` | Intentionally skipped |\n\n## Multi-founder Rows\n\nWhen a TSV row has multiple founders, track per-founder status separated by ` | `:\n```\nFounder1Slug: Request Sent | Founder2Slug: Already Connected\n```\n\n## Rate Limiting & Anti-Detection\n\n> ⚠️ LinkedIn flags accounts that jump directly between profile URLs. Always visit the feed between profiles — no exceptions.\n\n- **Navigate to `/feed/` before every single profile**, without exception. See `references/browser-workflow.md` for the exact call. This is the primary anti-detection measure.\n- Add a short natural pause (2–4 seconds) after loading the feed before navigating to the next profile.\n- If >3 consecutive clean URLs return 404, pause for 10 seconds on the feed before continuing (then fall back to Google/LinkedIn search).\n- Do not open new browser tabs — the relay breaks; reuse the same attached tab for every action.\n- Aim for no more than 20–25 connection requests per session. Stop and tell the user if you're approaching this limit.\n\n## Saving Progress\n\nUse a `linkedin_progress.json` sidecar file:\n```json\n{ \"statuses\": { \"https://www.linkedin.com/in/username/\": \"Request Sent\" } }\n```\nUpdate the TSV from this dict every 10 profiles or at the end.\n\n## References\n\n- `references/browser-workflow.md` - Detailed browser steps for all three tiers and both connect patterns\n","readmeExcerpt":"--- name: linkedin-connect description: Send LinkedIn connection requests to a list of people via browser automation and track status in a CSV/TSV file. Use when the user wants to bulk-connect with a list of people on LinkedIn (founders, speakers, leads, etc.) from a spreadsheet or list containing LinkedIn profile URLs. Handles Connect button, Follow-mode profiles, already-connected detection, stale URL fallback via ","codeSnippets":[],"executableExamples":[{"language":"python","snippet":"import 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)"},{"language":"text","snippet":"Founder1Slug: Request Sent | Founder2Slug: Already Connected"},{"language":"json","snippet":"{ \"statuses\": { \"https://www.linkedin.com/in/username/\": \"Request Sent\" } }"}],"parameters":{},"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["typescript"],"docsSourceLabel":"CLAWHUB","editorialOverview":"Send LinkedIn connection requests to a list of people via browser automation and track status in a CSV/TSV file. Use when the user wants to bulk-connect with a list of people on LinkedIn (founders, speakers, leads, etc.) from a spreadsheet or list containing LinkedIn profile URLs. Handles Connect button, Follow-mode profiles, already-connected detection, stale URL fallback via LinkedIn search and Google search, and incremental status tracking. --- name: linkedin-connect description: Send LinkedIn connection requests to a list of people via browser automation and track status in a CSV/TSV file. Use when the user wants to bulk-connect with a list of people on LinkedIn (founders, speakers, leads, etc.) from a spreadsheet or list containing LinkedIn profile URLs. Handles Connect button, Follow-mode profiles, already-connected detection, stale URL fallback via","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":426,"uniquenessScore":59,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T01:47:26.916Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}