Notion to LinkedIn, daily posts published for you
You sit down to “quickly post on LinkedIn” and somehow it turns into an admin task. Copy, paste, fix formatting, upload an image again, then remember to update your Notion status so you don’t accidentally publish it twice.
This Notion LinkedIn automation hits marketing managers first, but founders and consultants feel it too. You want consistent daily posts without living inside your content calendar.
This workflow pulls today’s draft from a Notion database, formats it cleanly (including images), publishes it to LinkedIn, then marks the Notion record as done so your calendar stays accurate.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Notion to LinkedIn, daily posts published for you
flowchart LR
subgraph sg0["Scheduled Run Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Scheduled Run Trigger", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Filter Daily Record"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Pull Page Content"]
n3@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Notion Blocks", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Format Post Text"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Image File"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Combine Streams"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/linkedin.svg' width='40' height='40' /></div><br/>Post to LinkedIn"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Mark Notion Status"]
n6 --> n7
n5 --> n6
n4 --> n6
n0 --> n1
n7 --> n8
n3 --> n4
n3 --> n5
n2 --> n3
n1 --> n2
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n1,n2,n8 database
class n5 api
class n4 code
classDef customIcon fill:none,stroke:none
class n1,n2,n4,n5,n6,n7,n8 customIcon
Why This Matters: Daily posting is easy to plan, hard to execute
Most teams don’t struggle with ideas. They struggle with the last 10 minutes. That’s the awkward handoff between “draft is ready in Notion” and “post is live on LinkedIn.” Formatting breaks when you paste. Images get lost. Someone posts the wrong version because the status wasn’t updated. And if you’re trying to post daily, that tiny bit of friction shows up every single morning. Honestly, it’s exhausting because it never feels finished.
It adds up fast. Here’s where it usually breaks down in the real world.
- Copy-pasting from Notion often mangles spacing and line breaks, so you end up rewriting the “final” draft in LinkedIn.
- Images live in the page, but LinkedIn wants an upload, which means another manual step and another chance to grab the wrong file.
- Status tracking drifts because people forget to mark posts as scheduled or published, so calendars become unreliable.
- Posting consistency turns into a daily dependency on one person, and the whole system pauses when they’re busy or out.
What You’ll Build: Notion drafts that publish themselves on LinkedIn
This workflow runs on a daily schedule and looks inside your Notion database for the post assigned to “today.” Once it finds the right record, it pulls the full page content (not just the title field), then collects the blocks so your writing can be turned into a clean LinkedIn-ready post. If the page includes an image, the workflow fetches the image file via an HTTP request and pairs it with the formatted text. After that, it publishes directly to LinkedIn. Finally, it updates the original Notion record so the status reflects reality, not best intentions.
The workflow starts with a scheduled trigger. Then Notion content is aggregated and formatted, and any associated image is retrieved. LinkedIn receives a ready-to-publish payload, and Notion gets a status update so your database stays trustworthy.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you publish one LinkedIn post every weekday. Manually, most people spend about 10 minutes cleaning up formatting, plus another 5 minutes dealing with an image and double-checking the right version, so roughly 15 minutes a day. That’s about an hour a week, and it’s always the same boring work. With this workflow, the “work” is just drafting in Notion and setting the date/status; the publishing and status update happen automatically on schedule.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Notion for your draft database and pages
- LinkedIn to publish posts on your behalf
- Notion integration token (create it in Notion integrations)
Skill level: Beginner. You’ll connect accounts, map a few fields, and test a sample post.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A daily scheduled trigger runs. At the time you choose (weekday mornings, for example), n8n starts the workflow automatically. No buttons to click, no reminders needed.
Notion is queried for today’s record. The workflow filters your database to find the page that should be posted today, then pulls the page content so it has the actual blocks, not just a preview.
Content is assembled and formatted. An aggregation step collects blocks, then a formatting step turns them into clean post text. If the page includes an image, the workflow fetches the image file and merges it with the text stream.
LinkedIn publishes, then Notion is updated. The LinkedIn node posts the final content, and once it succeeds, the Notion status is marked so your database stays in sync with what happened.
You can easily modify the Notion “filter” rules to post only on weekdays, skip holidays, or pull from different content types based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Trigger
Set the workflow to run automatically on a daily schedule.
- Add and open Scheduled Run Trigger.
- Set the schedule rule to run at
15for triggerAtHour. - Connect Scheduled Run Trigger to Filter Daily Record.
Step 2: Connect Notion and Pull Today’s Content
Query the Notion database for today’s record and pull the page blocks for content and images.
- Open Filter Daily Record and set Resource to
databasePageand Operation togetAll. - In Filters, set the date condition to
{{ $today.format("yyyy/mM/dd") }}for the Date|date field. - Select your Notion database in Database ID.
- Credential Required: Connect your notionApi credentials in Filter Daily Record.
- Open Pull Page Content and set Resource to
block, Operation togetAll, and Return All totrue. - Set Block ID to
{{ $json.url }}. - Credential Required: Connect your notionApi credentials in Pull Page Content.
Execution Flow: Scheduled Run Trigger → Filter Daily Record → Pull Page Content.
Step 3: Aggregate and Format Content (Parallel Branches)
Aggregate the Notion blocks and split into parallel processing paths for text formatting and image retrieval.
- Open Aggregate Notion Blocks and ensure Fields to Aggregate includes
contentandimage.file.url. - Connect Pull Page Content to Aggregate Notion Blocks.
- Configure Format Post Text with the provided jsCode to output
formattedText. - Set Fetch Image File URL to
{{ $json.url[0] }}.
Parallel Execution: Aggregate Notion Blocks outputs to both Format Post Text and Fetch Image File in parallel.
Step 4: Combine Streams and Post to LinkedIn
Merge the formatted text and image file, then publish the post to LinkedIn.
- Open Combine Streams and set Mode to
combinewith Combination ModemergeByPosition. - Connect Format Post Text to Combine Streams (input index 0) and Fetch Image File to Combine Streams (input index 1).
- Open Post to LinkedIn and set Text to
{{ $json.formattedText }}. - Set Person to
[YOUR_ID]and Share Media Category toIMAGE. - Credential Required: Connect your linkedInOAuth2Api credentials in Post to LinkedIn.
Execution Flow: Combine Streams → Post to LinkedIn.
[YOUR_ID], LinkedIn will reject the request. Replace it with your actual LinkedIn member ID.Step 5: Update Notion Status After Posting
Mark the Notion record as published to prevent reposting the same content.
- Open Mark Notion Status and set Resource to
databasePageand Operation toupdate. - Set Page ID to
{{ $('Filter Daily Record').item.json.url }}. - In Properties, set Status|select to
Published. - Credential Required: Connect your notionApi credentials in Mark Notion Status.
Execution Flow: Post to LinkedIn → Mark Notion Status.
Step 6: Test and Activate Your Workflow
Run a full test to confirm Notion data pulls, formatting, image retrieval, LinkedIn posting, and status updates.
- Click Execute Workflow to run a manual test from Scheduled Run Trigger.
- Verify that Post to LinkedIn creates a post with the expected text and image.
- Confirm Mark Notion Status updates the Notion record’s Status to
Published. - Once validated, toggle the workflow to Active to enable scheduled runs.
Troubleshooting Tips
- Notion credentials can expire or lack access to the database. If it fails, check the Notion integration token and confirm the database is shared with that integration.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- LinkedIn permissions matter more than people expect. Reconnect your LinkedIn account in n8n and confirm you’re posting to the correct profile or organization page.
Quick Answers
About 30 minutes if your Notion database is already organized.
No. You will mostly connect accounts and map fields in Notion and LinkedIn.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Notion and LinkedIn, which are typically $0 in API costs for this use case.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s one of the best parts. You can change the “Filter Daily Record” Notion step to pull posts by status (like “Approved”), by author, or by a content pillar tag. You can also swap the schedule trigger to run multiple times per day, or only on weekdays. And if you want to post without images sometimes, add a simple conditional before the HTTP image fetch so text-only posts still publish cleanly.
Usually it’s permission-related. Confirm the Notion integration token is still valid, then open the Notion database and make sure it’s shared with that integration. If the database structure changed (properties renamed, status values edited), update the mapped fields in the Notion nodes so the filter can find today’s record.
For a daily posting workflow, volume is rarely the limiter; it can comfortably handle one or a few posts per day.
Sometimes, yes, but it depends on what your Notion pages look like. This workflow pulls page blocks, aggregates them, formats text, and optionally fetches an image file, which can be annoying to recreate in simpler “trigger → action” tools. n8n is also easier when you need branching logic (for example, skip if no post exists today, or handle image vs. no-image). If you only need “new database item → create LinkedIn post,” Zapier or Make can be quicker to set up. If you want full control and a workflow you can grow over time, n8n is a better fit for many teams. Talk to an automation expert if you’re not sure which fits.
Once it’s running, your Notion database becomes the source of truth and LinkedIn takes care of itself. That’s consistency without the daily scramble.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.