Automate LinkedIn Medium Posts with n8n & Airtable Integration

Save hours daily by automating LinkedIn posts from Medium articles using n8n, Airtable, and Telegram updates. Avoid reposting duplicates and stay informed effortlessly.
Airtable
HTTP Request
LinkedIn
+6
Learn how to Build this Workflow with AI:
Workflow Identifier: 1972
NODES in Use: Airtable, Code, Filter, HTTP Request, If, LinkedIn, Telegram, Schedule Trigger, Sticky Note

Press CTRL+F5 if the workflow didn't load.

Visit through Desktop for Best experience

1. Facing the LinkedIn Content Posting Dilemma: Meet Raj

Raj is a content marketer juggling multiple tasks each day. Twice daily, at 9 AM and 7 PM, he manually curates Medium articles on Android development to post on his company LinkedIn page. This task eats up nearly 30 minutes a day, and overtime, Raj notices repetitive posts slipping through, causing engagement drops and reputational harm. Raj needs a reliable system that automates this posting process, ensures no article is posted twice, and updates him efficiently.

This is exactly where this LinkedIn Medium Posts Automation workflow built with n8n fits perfectly, empowering Raj to automate this monotonous and error-prone task.

2. What This LinkedIn Automation Achieves

When this automation runs, it performs the following specific actions:

  • Twice daily scheduled triggers at 9:00 AM and 7:00 PM initiate the process automatically, eliminating manual scheduling.
  • Fetches latest Medium articles filtered by a random Android development-related tag, ensuring fresh and relevant content.
  • Checks posted article IDs against Airtable to avoid reposting duplicates, maintaining your LinkedIn feed’s uniqueness and quality.
  • Fetches full article content and images from Medium via RapidAPI to prepare posts with rich media.
  • Posts the curated article snippet publicly on LinkedIn with hashtags and proper formatting using the LinkedIn node.
  • Saves posted article IDs into Airtable after successful posting to update the used articles database.
  • Sends Telegram notifications confirming each successful post, keeping you informed instantly without checking LinkedIn manually.

By automating these six tasks, Raj saves approximately 1 hour daily, avoids human errors like reposting, and gains transparency about content flow.

3. Prerequisites ⚙️

  • n8n account (cloud or self-hosted) where you’ll set up this workflow.
  • Airtable account with a base and table to store posted Medium article IDs.
  • LinkedIn OAuth2 credentials with permissions to post content on your profile or company page.
  • Telegram bot token and chat ID to receive post status updates.
  • RapidAPI key to access Medium API endpoints for fetching articles and content.

Optional: If you prefer self-hosting n8n for full control, Hostinger offers affordable server options for easy deployment (learn more here).

4. Step-by-Step Guide to Build the LinkedIn Medium Posting Automation

Step 1: Set Up the Schedule Trigger Node

Navigate to Nodes → Schedule Trigger. Set the cron expression to 0 9,19 * * * to trigger the workflow daily at 9 AM and 7 PM. Confirm you see triggers firing at these times.

Common mistake: Using incorrect cron syntax can cause no triggers. Always test with the built-in test button or run manually initially.

Step 2: Create Code Node to Pick Random Medium Tags

Add a Code node, name it “get random tags”. Enter the following JavaScript:

const devToTags = [
  "android",
  "androiddev",
  "kotlin",
  "jetpack-compose",
  "android-appdevelopment",
  "app-development"
];

function getRandomValuesAsObjects(list, count) {
  const randomValues = [];
  for (let i = 0; i < count; i++) {
    const randomIndex = Math.floor(Math.random() * list.length);
    randomValues.push({ json: { value: list[randomIndex] } });
  }
  return randomValues;
}

return getRandomValuesAsObjects(devToTags, 1);

This picks a random tag to query Medium articles for variety.

Expected outcome: One tag value like "androiddev" outputs from this node.

Step 3: Fetch List of Previously Posted Articles from Airtable

Add an Airtable node named "Get List of records used". Connect your Airtable base and table (e.g., "Used Articles") where you log posted articles. Set operation to "search" to get all records.

This node outputs all IDs of articles posted before, useful for filtering duplicates.

Step 4: Map Used Article IDs to a Simple Array

Add a Code node named "map used articls ids" (spelling as per workflow). Use this code:

let values = $input.all().map(item => item.json.value);

return [
  {
    json: {
      values: values
    }
  }
];

This formats the Airtable response into a simple array of IDs.

Step 5: Call Medium API to Fetch Articles Based on Random Tag

Use an HTTP Request node named "fetch article ids from tag" with method GET. Set URL as:

https://medium2.p.rapidapi.com/search/articles?query={{ $('get random tags').first().json.value }}

Add headers:
"x-rapidapi-host": "medium2.p.rapidapi.com"
"x-rapidapi-key": "YOUR_RAPIDAPI_KEY"

This fetches article IDs matching the tag.

Step 6: Filter Out Article IDs Already Used

Use the Filter node named "filter only unused Ids". Configure with condition:

  • Operator: Array / Not Contains
  • Left Value: Expression from map used article IDs node - {{ $('map used articls ids').item.json.values }}
  • Right Value: {{ $json.articles }} from Medium API response

This filters out IDs already posted.

Step 7: Fetch Full Content of the Selected Medium Article

Add an HTTP Request node named "Fetch Medium post using Article Id". Set URL:

https://medium2.p.rapidapi.com/article/{{ $json.articles.randomItem() }}

Include headers as before with RapidAPI keys.

Outputs full article data including title, content, and image URL.

Step 8: Conditional Check for Image URL Presence

Add an If node named "If". Configure condition as:

  • Check if {{$json.image_url}} is not empty.

This passes only articles having featured images for richer posts.

Step 9: Fetch Full Article Content for Posting

Add an HTTP Request node named "Fetch Medium post content". Use URL:

https://medium2.p.rapidapi.com/article/{{$json.id}}/content

This obtains article snippet for LinkedIn post body.

Step 10: Download Featured Image

Use an HTTP Request node named "download image for post". Use URL from the If node's image_url. Require header "User-Agent" set to "Mozilla/5.0" to mimic browser.

Step 11: Post the Article to LinkedIn

Add a LinkedIn node named "make Linkedin post". Configure:

  • Text field trimmed to first 600 characters of article content.
  • Include article link formatted as https://freedium.cfd/{{ $('If').item.json.url }}.
  • Add hashtags relevant to Android development and software engineering.
  • Set visibility to "PUBLIC".
  • Share with media category as "IMAGE" to include the downloaded image.

Use your LinkedIn OAuth2 credentials.

Step 12: Update Airtable with New Posted Article ID

Add an Airtable node "Update the used node" to create a new record with the posted article’s ID, preventing reposts.

Step 13: Send Telegram Notification on Success

Add a Telegram node named "sent the status". Enter message text including the article title and ID. Set chat ID to your Telegram account.

5. Customizations ✏️

  • Change Posting Frequency: In the "Morning 9 Clock" Schedule Trigger node, modify the cron expression to add or remove posting times.
  • Add More Medium Tags: Edit the JavaScript array in "get random tags" to include other relevant tags beyond Android development.
  • Customize LinkedIn Post Format: In "make Linkedin post", adjust hashtags, text length, or add mentions to fit your branding.
  • Switch Notification Channel: Replace the Telegram node with Slack or Email nodes if preferred for notifications.

6. Troubleshooting 🔧

Problem: "No articles posted, workflow runs but gets empty results"

Cause: The Medium API returns no new article IDs or RapidAPI keys are missing/incorrect.

Solution: Verify RapidAPI keys in HTTP Request nodes for Medium API. Test the API endpoints separately from n8n.

Problem: "LinkedIn post fails with authentication error"

Cause: LinkedIn OAuth2 token expired or incorrect permissions.

Solution: Reconnect LinkedIn credentials in n8n and ensure correct permissions (write access to post). Refresh tokens as needed.

Problem: "Duplicate posts appearing despite Airtable tracking"

Cause: Airtable records not updating correctly, or filter logic with IDs mismatched.

Solution: Check "Update the used node" mapping is correctly adding new article IDs. Verify "filter only unused Ids" condition array compares ID formats accurately.

7. Pre-Production Checklist ✅

  • Confirm Airtable base and table have read/write access and correct schema (fields: id and value).
  • Test RapidAPI access for both article search and content fetching endpoints.
  • Manually run workflow once and verify LinkedIn posts appear correctly.
  • Check Telegram receives correct notification messages.
  • Backup Airtable data before bulk testing to enable rollback.

8. Deployment Guide

Activate the workflow and enable it in n8n. Monitor the first few executions for errors in execution logs.

Adjust scheduling as needed for your timezone in the workflow settings.

Use Telegram alerts for real-time monitoring without direct LinkedIn checks.

9. FAQs

Can I use a different API instead of RapidAPI for Medium?
Yes, if you have access to another Medium-like API, adjust HTTP request URLs and headers accordingly in the nodes.
Does posting consume LinkedIn API credits or limits?
LinkedIn API has rate limits; this workflow schedules two posts daily, which is well below typical limits.
Is my LinkedIn and Airtable data secure?
Yes, all credentials are securely stored in n8n, and data transfers happen via encrypted HTTPS requests.

10. Conclusion

By setting up this n8n workflow, you’ve automated LinkedIn Medium article posting with Airtable duplicate checks and Telegram notifications. This saves hours of daily manual work, reduces post errors, and keeps you informed effortlessly.

Next, you could extend this automation by adding content scheduling based on audience engagement, linking to other social networks, or integrating content summarization AI for custom post snippets.

Get ready to reclaim your time and maintain a vibrant LinkedIn presence with confidence!

Related Workflows

Automate Viral UGC Video Creation Using n8n + Degaus (Beginner-Friendly Guide)

Learn how to automate viral UGC video creation using n8n, AI prompts, and Degaus. This beginner-friendly guide shows how to import, configure, and run the workflow without technical complexity.
Form Trigger
Google Sheets
Gmail
+37
Free

AI SEO Blog Writer Automation in n8n (Beginner Guide)

A complete beginner guide to building an AI-powered SEO blog writer automation using n8n.
AI Agent
Google Sheets
httpRequest
+5
Free

Automate CrowdStrike Alerts with VirusTotal, Jira & Slack

This workflow automates processing of CrowdStrike detections by enriching threat data via VirusTotal, creating Jira tickets for incident tracking, and notifying teams on Slack for quick response. Save hours daily by transforming complex threat data into actionable alerts effortlessly.
scheduleTrigger
httpRequest
jira
+5
Free

Automate Telegram Invoices to Notion with AI Summaries & Reports

Save hours on financial tracking by automating invoice extraction from Telegram photos to Notion using Google Gemini AI. This workflow extracts data, records transactions, and generates detailed spending reports with charts sent on schedule via Telegram.
lmChatGoogleGemini
telegramTrigger
notion
+9
Free

Automate Email Replies with n8n and AI-Powered Summarization

Save hours managing your inbox with this n8n workflow that uses IMAP email triggers, AI summarization, and vector search to draft concise replies requiring minimal review. Automate business email processing efficiently with AI guidance and Gmail integration.
emailReadImap
vectorStoreQdrant
emailSend
+12
Free

Automate Email Campaigns Using n8n with Gmail & Google Sheets

This n8n workflow automates personalized email outreach campaigns by integrating Gmail and Google Sheets, saving hours of manual follow-up work and reducing errors in email sequences. It ensures timely follow-ups based on previous email interactions, optimizing communication efficiency.
googleSheets
gmail
code
+5
Free