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}}/contentThis 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!