🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Linkedin Pipedream

by @g9pedro

Post to LinkedIn, comment, like, search organizations, and manage profiles via Pipedream OAuth integration.

Versionv1.0.0
Downloads2,117
Installs5
TERMINAL
clawhub install linkedin-pipedream

πŸ“– About This Skill


name: linkedin-pipedream description: Post to LinkedIn, comment, like, search organizations, and manage profiles via Pipedream OAuth integration. homepage: https://mcp.pipedream.com metadata: { "openclaw": { "emoji": "πŸ’Ό", "requires": { "bins": ["pdauth"], "skills": ["pdauth"] }, "install": [ { "id": "pdauth-dep", "kind": "skill", "skill": "pdauth", "label": "Install pdauth skill first", }, ], }, }

LinkedIn via Pipedream β€” Post, Comment & Engage

Full LinkedIn automation using Pipedream's OAuth infrastructure. Post as yourself or your organization, comment on posts, search companies, and more.

Prerequisites

1. pdauth CLI installed and configured β€” see pdauth skill 2. LinkedIn account connected via OAuth

Quick Start

# 1. Connect LinkedIn (generates OAuth link for user to click)
pdauth connect linkedin --user telegram:5439689035

2. After user authorizes, verify connection

pdauth status --user telegram:5439689035

3. Post to LinkedIn

pdauth call linkedin.linkedin-create-text-post-user \ --user telegram:5439689035 \ --args '{"instruction": "Create a post: Excited to announce our new product launch! πŸš€"}'

OAuth Flow

# Generate OAuth link
pdauth connect linkedin --user USER_ID

Share with user: "Click to authorize LinkedIn: "

User clicks β†’ authorizes via LinkedIn β†’ done

Verify connection

pdauth status --user USER_ID

User ID convention: Use telegram: format for Telegram users.


Available Tools (19 total)

βœ… Working via MCP (pdauth call)

| Tool | Purpose | |------|---------| | linkedin-create-text-post-user | Post as personal account | | linkedin-create-image-post-user | Post with image (personal) | | linkedin-create-comment | Comment on any post | | linkedin-create-like-on-share | Like a post | | linkedin-search-organization | Search for companies | | linkedin-get-current-member-profile | Get your own profile | | linkedin-get-member-profile | Get any member's profile | | linkedin-get-org-member-access | Check org admin status | | linkedin-retrieve-comments-shares | Get comments on a post | | linkedin-delete-post | Delete your post |

⚠️ Broken via MCP (requires workaround)

| Tool | Issue | Workaround | |------|-------|------------| | linkedin-create-text-post-organization | "tool name too long" bug | Use direct SDK call | | linkedin-create-image-post-organization | Same bug | Use direct SDK call |


Tool Reference

1. Create Personal Post

pdauth call linkedin.linkedin-create-text-post-user \
  --user telegram:5439689035 \
  --args '{"instruction": "Create a post: Your post content here. Use emojis πŸŽ‰ and hashtags #AI #Tech"}'

Tips:

  • Keep posts under 3000 characters
  • Emojis increase engagement
  • Use line breaks for readability
  • 2. Create Image Post (Personal)

    pdauth call linkedin.linkedin-create-image-post-user \
      --user telegram:5439689035 \
      --args '{"instruction": "Create image post with text: Check out our new office! Image URL: https://example.com/image.jpg"}'
    

    3. Comment on a Post

    # Comment using post URN
    pdauth call linkedin.linkedin-create-comment \
      --user telegram:5439689035 \
      --args '{"instruction": "Comment on urn:li:share:7293123456789012480 with text: Great insights! Thanks for sharing."}'
    

    Finding post URNs:

  • From LinkedIn URL: linkedin.com/posts/username_activity-7293123456789012480 β†’ URN is urn:li:share:7293123456789012480
  • Or use linkedin-retrieve-comments-shares on known posts
  • 4. Like a Post

    pdauth call linkedin.linkedin-create-like-on-share \
      --user telegram:5439689035 \
      --args '{"instruction": "Like the post urn:li:share:7293123456789012480"}'
    

    5. Search Organizations

    pdauth call linkedin.linkedin-search-organization \
      --user telegram:5439689035 \
      --args '{"instruction": "Search for companies matching: artificial intelligence startups"}'
    

    6. Get Your Profile

    pdauth call linkedin.linkedin-get-current-member-profile \
      --user telegram:5439689035 \
      --args '{"instruction": "Get my LinkedIn profile"}'
    

    Returns: name, headline, URN, vanity name, etc.

    7. Get Member Profile

    pdauth call linkedin.linkedin-get-member-profile \
      --user telegram:5439689035 \
      --args '{"instruction": "Get profile for member URN urn:li:person:30_5n7bx7f"}'
    

    8. Check Organization Admin Access

    pdauth call linkedin.linkedin-get-org-member-access \
      --user telegram:5439689035 \
      --args '{"instruction": "Check my access level for organization 105382747"}'
    

    Returns: ADMINISTRATOR, MEMBER, or NONE

    9. Get Comments on a Post

    pdauth call linkedin.linkedin-retrieve-comments-shares \
      --user telegram:5439689035 \
      --args '{"instruction": "Get comments for post urn:li:share:7293123456789012480"}'
    

    10. Delete a Post

    pdauth call linkedin.linkedin-delete-post \
      --user telegram:5439689035 \
      --args '{"instruction": "Delete post urn:li:share:7293123456789012480"}'
    


    Organization Posting (Workaround Required)

    The Bug

    linkedin-create-text-post-organization fails via MCP with:

    Error: tool name too long
    

    This is a Pipedream MCP bug, not a LinkedIn API issue.

    Workaround: Direct SDK Call

    Create a Node.js script to post as organization:

    // org-post.mjs
    import { PipedreamClient } from '@pipedream/sdk';

    const client = new PipedreamClient({ projectEnvironment: 'development', clientId: 'YOUR_CLIENT_ID', // from ~/.config/pdauth/config.json clientSecret: 'YOUR_CLIENT_SECRET', projectId: 'YOUR_PROJECT_ID', });

    async function postAsOrg(orgId, text) { const result = await client.actions.run({ id: 'linkedin-create-text-post-organization', externalUserId: 'telegram:5439689035', configuredProps: { linkedin: { authProvisionId: 'apn_4vhLGx4' }, // LinkedIn account ID organizationId: orgId, text: text, }, }); console.log('Posted!', result); }

    // Example usage postAsOrg('105382747', 'Hello from Versatly! πŸš€');

    Run with:

    node org-post.mjs
    

    Known Organization IDs

    | Organization | ID | URN | |--------------|-----|-----| | Versatly | 105382747 | urn:li:organization:105382747 |


    Key Reference Values

    Pedro's LinkedIn Info

    | Item | Value | |------|-------| | Member URN | urn:li:person:30_5n7bx7f | | User ID (Pipedream) | telegram:5439689035 | | Auth Provision ID | apn_4vhLGx4 | | Admin of | Versatly (org 105382747) |

    URN Formats

    | Type | Format | Example | |------|--------|---------| | Person | urn:li:person:ID | urn:li:person:30_5n7bx7f | | Organization | urn:li:organization:ID | urn:li:organization:105382747 | | Post/Share | urn:li:share:ID | urn:li:share:7293123456789012480 | | Comment | urn:li:comment:(urn:li:share:ID,ID) | Complex nested URN |


    Common Patterns

    Pattern 1: Post and Verify

    # Post
    pdauth call linkedin.linkedin-create-text-post-user \
      --user telegram:5439689035 \
      --args '{"instruction": "Create post: Just shipped a new feature! πŸŽ‰"}'

    The response includes the post URN - save it for later

    Pattern 2: Engage with Content

    # Find posts to engage with (manual: get URN from LinkedIn URL)
    

    Like the post

    pdauth call linkedin.linkedin-create-like-on-share \ --user telegram:5439689035 \ --args '{"instruction": "Like post urn:li:share:7293123456789012480"}'

    Comment

    pdauth call linkedin.linkedin-create-comment \ --user telegram:5439689035 \ --args '{"instruction": "Comment on urn:li:share:7293123456789012480: Congrats on the launch!"}'

    Pattern 3: Research a Company

    # Search for the company
    pdauth call linkedin.linkedin-search-organization \
      --user telegram:5439689035 \
      --args '{"instruction": "Search for OpenAI"}'

    Check if you have admin access (for orgs you manage)

    pdauth call linkedin.linkedin-get-org-member-access \ --user telegram:5439689035 \ --args '{"instruction": "Check access for organization 12345678"}'


    Error Handling

    Common Errors

    | Error | Cause | Solution | |-------|-------|----------| | App not connected | No LinkedIn OAuth | Run pdauth connect linkedin --user USER_ID | | tool name too long | MCP bug for org tools | Use direct SDK workaround | | 403 Forbidden | No permission for action | Check org admin status | | Invalid URN | Malformed URN format | Use correct format: urn:li:type:id | | Rate limited | Too many API calls | Wait and retry (LinkedIn limits ~100 calls/day) |

    Checking Connection Status

    # Quick status check
    pdauth status --user telegram:5439689035

    JSON output for parsing

    pdauth status --user telegram:5439689035 --json

    Reconnecting

    If OAuth expires or breaks:

    pdauth disconnect linkedin --user telegram:5439689035
    pdauth connect linkedin --user telegram:5439689035
    

    Share new link with user


    Best Practices

    1. Rate Limits: LinkedIn is strict. Space out bulk operations. 2. Content Quality: LinkedIn penalizes spammy content. Write thoughtfully. 3. Org Posting: Always verify admin access before attempting org posts. 4. URN Handling: Always validate URN format before API calls. 5. Error Recovery: If a post fails, check status before retrying (may have succeeded).


    Example Workflow: Complete LinkedIn Campaign

    # 1. Verify connection
    pdauth status --user telegram:5439689035

    2. Check org admin status

    pdauth call linkedin.linkedin-get-org-member-access \ --user telegram:5439689035 \ --args '{"instruction": "Check access for organization 105382747"}'

    3. Post personal announcement

    pdauth call linkedin.linkedin-create-text-post-user \ --user telegram:5439689035 \ --args '{"instruction": "Create post: Thrilled to share that Versatly just launched our new AI assistant! πŸ€– #AI #Startup"}'

    4. Post as organization (use SDK workaround)

    β†’ Run org-post.mjs script

    5. Engage with relevant industry posts

    pdauth call linkedin.linkedin-create-comment \ --user telegram:5439689035 \ --args '{"instruction": "Comment on urn:li:share:XXXXX: Great perspective on AI safety!"}'


    Files & Configuration

    | File | Purpose | |------|---------| | ~/.config/pdauth/config.json | Pipedream credentials | | ~/.openclaw/workspace/pdauth/ | pdauth CLI source | | ~/.openclaw/workspace/skills/pdauth/SKILL.md | pdauth skill reference |


    See Also

  • pdauth skill β€” OAuth management for all Pipedream apps
  • Pipedream MCP β€” Browse all available integrations
  • LinkedIn API Docs β€” Official API reference
  • πŸ’‘ Examples

    # 1. Connect LinkedIn (generates OAuth link for user to click)
    pdauth connect linkedin --user telegram:5439689035

    2. After user authorizes, verify connection

    pdauth status --user telegram:5439689035

    3. Post to LinkedIn

    pdauth call linkedin.linkedin-create-text-post-user \ --user telegram:5439689035 \ --args '{"instruction": "Create a post: Excited to announce our new product launch! πŸš€"}'

    βš™οΈ Configuration

    1. pdauth CLI installed and configured β€” see pdauth skill 2. LinkedIn account connected via OAuth

    πŸ“‹ Tips & Best Practices

    1. Rate Limits: LinkedIn is strict. Space out bulk operations. 2. Content Quality: LinkedIn penalizes spammy content. Write thoughtfully. 3. Org Posting: Always verify admin access before attempting org posts. 4. URN Handling: Always validate URN format before API calls. 5. Error Recovery: If a post fails, check status before retrying (may have succeeded).