Automate LinkedIn Posts with Images and Videos

LinkedIn has no native node in n8n. Make.com has a LinkedIn module, but it breaks often and lacks video support. The LinkedIn API itself requires a multi-step upload flow for images (register upload, binary PUT, then create post referencing the asset) and an even more complex flow for video. Users on both forums spend weeks debugging OAuth scopes, upload URLs, and undocumented error responses.

This is the platform that causes the most frustration in social media automation workflows. On the n8n forumarrow-up-right, multiple threads describe workflows that execute without errors but never publish the post. On Make.comarrow-up-right, users report the LinkedIn module silently failing after API changes.

Here is how to skip the LinkedIn API entirely and post text, images, and videos to LinkedIn with one API call.

Why the LinkedIn API is painful

Posting an image to LinkedIn through their API requires four steps:

  1. Register an upload with POST /rest/images?action=initializeUpload, providing your organization or person URN.

  2. Upload the binary image data with a PUT request to the upload URL returned in step 1.

  3. Create the post with POST /rest/posts, referencing the image asset URN from step 1.

  4. Handle OAuth2 token refresh when your access token expires (every 60 days for most apps).

Video uploads are worse. LinkedIn requires chunked uploads for videos over 4MB, with a separate "finalize" step after all chunks are uploaded, followed by a processing wait before you create the post.

On n8n, users build this with 4-6 HTTP Request nodes chained together. On Make.com, users add custom HTTP modules because the native LinkedIn module does not support image or video uploads reliably.

If any step fails, debugging is difficult. LinkedIn returns vague error messages like PERMISSION_DENIED or INVALID_MEDIA_UPLOAD without specifying which permission or which upload step failed.

The simpler approach: one API call

With the Blotato Publish API, posting to LinkedIn is one request. Pass image or video URLs directly -- no upload step, no binary PUT, no asset URNs.

Text-only post

Post with an image

Post with a video

Post to a company page

Add pageId in the target object. Get your pageId by calling GET /v2/users/me/accounts/{accountId}/subaccounts (docs).

Step-by-step: n8n workflow

  1. Install the Blotato community nodearrow-up-right in n8n (Settings > Community Nodes > search "Blotato").

  2. Add a trigger node. Use Google Sheets, Airtable, a webhook, or a schedule.

  3. Add a Blotato Publish Post node.

  4. Set the platform to LinkedIn.

  5. Pass your accountId. To find it, add a Blotato List Accounts node earlier in the workflow, or look it up in the Blotato dashboardarrow-up-right.

  6. For company page posts, add a Blotato List Subaccounts node to get the pageId, and pass it in the target.

  7. Set the text field with your post content.

  8. Pass image or video URLs in the mediaUrls field. No upload step required.

  9. Run the workflow.

For a full walkthrough, see: n8n Post Everywherearrow-up-right

Step-by-step: Make.com scenario

  1. Add a trigger module (Google Sheets, Airtable, webhook).

  2. Add an HTTP module:

    • Method: POST

    • URL: https://backend.blotato.com/v2/posts

    • Headers: blotato-api-key: your-api-key

    • Body type: JSON

    • Body: your post JSON with platform and targetType set to "linkedin"

  3. Add a second HTTP module to poll GET https://backend.blotato.com/v2/posts/{postSubmissionId} for the publish status.

  4. Run the scenario.

LinkedIn-specific limits

Content type
Limit

Text

Up to 3,000 characters

Images

JPG, PNG, GIF -- up to 5 MB

Video

MP4 -- up to 500 MB, up to 30 minutes

Aspect ratios

16:9 (landscape), 9:16 (portrait), 1:1 (square)

For full details, see: LinkedIn Supported Posts and Media

Scheduling LinkedIn posts

Add scheduledTime to queue a post for a specific time instead of publishing immediately:

Or use "useNextFreeSlot": true to fill the next open slot in your content calendar. See Build a Social Media Scheduler for a full scheduling setup.

Combining with AI content generation

Pair LinkedIn publishing with Blotato's Source API to repurpose content:

  1. Feed a blog post URL into the Create Source endpoint with custom instructions: "Rewrite as a LinkedIn post with a hook, 3 key points, and a call to action."

  2. Pass the extracted text into the Publish Post endpoint.

  3. Schedule it for peak LinkedIn hours (Tuesday-Thursday, 8-10am in your audience's timezone).

See Repurpose a URL into Social Media Posts for the full repurposing workflow.

Forum threads referenced

These are the community discussions that prompted this post:

Last updated