slys.dev

slys.dev

How you can automate sharing your Substack to X, Threads, Notes & Bluesky

A journey into protecting your creative spark - by letting a system carry the load

Jakub Slys 🤖's avatar
Jakub Slys 🤖
Nov 06, 2025
∙ Paid

There’s a unique high to hitting “Publish” on a Substack post. Your thoughts, polished and stitched into something coherent, are out in the world. For a few minutes, you’re proud. Clear-headed. Done.

It feels like exhaling after holding your breath through edits, drafts, and second-guesses. The post is yours. Your voice, your tempo, your truth.

You savor the moment. You refresh once or twice. Maybe someone replies. A handful of hearts. Someone says, “This hit home”.

And then - almost on cue - that quiet pressure creeps in.

“Now what?”

You open Threads. You open X. You open Bluesky. You open Substack Notes. Four tabs. Four different cultures. Four slightly different audiences expecting slightly different versions of the same idea.

Suddenly, the tone you took 45 minutes to shape gets sliced up by character limits. The nuance you threaded into the piece gets crushed by speed-scrolling. You’re rewriting the same intro again - only punchier. Shorter. More hashtags? Fewer? What’s the vibe on Threads today? Does X still care about links? Is Bluesky better with threads or quotes?

The tools don’t help. They’re not built for writers - they’re built for velocity. You’re backspacing more than you’re creating. Your energy is not going toward expression, but toward translation. Between formats. Between tones. Between apps.

Your browser is now a distribution factory. A cold one. It’s all CTRL+C and CTRL+V. Your own words feel like a burden.

What’s worse? You start to dread publishing.

You dread the half hour after the high.

Because you know what’s coming.

“I was spending more time distributing my words than writing them.”

And that’s when the real question began echoing louder and louder:

“What if I could keep the creative parts — and let a system handle the rest?”

💡 Just want the workflows?

If you’re here for the ready-to-use n8n automations, feel free to scroll down straight to the 📎 download section.


💡 Why I decided to automate (and how AI became my co-writer)

It started with curiosity. Just a passing thought during one of those post-distribution slogs: Could I build a system that took care of all this - without losing what made my writing feel like me?

But it wasn’t really curiosity. It was fatigue. Emotional, cognitive fatigue - the kind that builds up silently. Like condensation on a window, until one day it finally blurs your view.

I remember staring at five open tabs. Threads. Bluesky. X. Substack Notes. A spreadsheet with ideas half-formed, half-forgotten. I wasn’t editing anymore - I was copy-pasting. Not creating - just parsing. And with every repackaged line, something in me dimmed. The joy of writing hadn’t gone anywhere. But everything around it - the busywork, the formatting, the endless tweaking - made me dread the part I used to love most: sharing.

The real decision came in a moment of strange clarity. I realized I was resenting my own creativity. I’d pour myself into a Substack post, feel proud of it - and then immediately wish I hadn’t written it. Because I knew what followed. The relay race. The slicing. The “which version fits where” routine. It wasn’t sustainable. Not if I wanted to keep showing up honestly.

That’s when I started poking around with automation again. First, out of a sense of survival. But quickly, it became something else: play.

The more I tinkered with AI, the more it surprised me. It wasn’t just capable of summarizing - it could adapt. It could sound like me. I’d feed it a long-form post, and out would come three punchy Threads, a heartfelt Bluesky post, or a Substack Note that actually carried nuance. And it didn’t feel like a compromise.

It felt like... collaboration.

AI didn’t act like a ghostwriter. It acted like a lens. It helped reshape my ideas for other contexts - without flattening them. More than anything, it didn’t complain. It didn’t get tired. It didn’t mind formatting the same sentence five different ways or checking whether a hashtag still made sense. It made the exhausting parts... invisible.

This wasn’t about taking myself out of the process. It was about putting my full self back into the part that mattered. Writing with presence. Publishing with peace.

“If I could automate the repeatable, I could reclaim the irreplaceable — focus, depth, and time to think.”

And n8n was the right canvas for the job. I didn’t need a SaaS tool with opinions. I needed building blocks. Something visual, something flexible, something open. n8n could talk to Substack, pass drafts to OpenAI, update Telegram, post to Threads - and just keep flowing.

So I grabbed my notebook. Scribbled out a map. Then opened n8n and dragged in the first node. A trigger here. A prompt there. I started weaving logic into narrative. It felt like writing - but with a different kind of language.

I was no longer just writing posts. I was designing the system that would carry them. And for the first time in a long while, I felt like I was protecting my craft - not sacrificing it.

⚙️ How I designed my automation stack

Let me take you behind the curtain. Because behind every “effortless” flow is a system that was built with care.

My stack? Surprisingly lean. Modular. And, dare I say, elegant.

At the center was n8n - my automation canvas. Visual, node-based, and open-source. I could see the flow of data as it moved. I could shape logic like sentences. I could debug with my eyes. It made me feel like a systems thinker, not just a writer with an idea.

Feeding it all was the Substack API. That was my source of truth. My original content, the long-form stuff, lived there.

Then came the OpenAI API. My collaborator. I didn’t treat it like a shortcut. I treated it like a filter for nuance. I wrote prompts the way I write intros: carefully. I gave context. I explained tone. And in return, it helped me distill my posts into formats fit for Threads, X, Bluesky, and Notes - without losing the soul.

To glue it together, I added Telegram. A simple reminder system. Whenever new notes were created, I’d get a ping. “Your Majesty, I’ve created Notes from [Post Title]. Remember to approve them!” Cheeky, sure. But it made the system feel alive. Responsive. Collaborative.

And then, the unsung hero: n8n Data Tables. My mini CMS. No need for Airtable or Notion. Just structured tables that stored everything: full posts, mini-notes, publishing status, access tokens. All right inside n8n.

But to really make this dance, I needed a few community-built tools.

That’s the beauty of n8n - it grows with its people. So I added:

  • n8n-nodes-substack - to pull content directly from Substack.

  • n8n-nodes-bluesky-enhanced - to post to Bluesky with proper threading.

  • n8n-nodes-oauth2-token - to automate token refresh flows for Meta Threads.

These weren’t just add-ons. They were upgrades. Extensions of capability, created by other builders solving their own creative problems.

Once all the pieces were in place, I sketched out my manual workflow on paper:

  1. Check for new post

  2. Generate short-form content

  3. Approve and publish

  4. Refresh tokens

Then, I recreated it inside n8n. Node by node. Condition by condition. The end result?

  • Substack Scraper - checks for new posts daily

  • Notes Factory - turns those into platform-ready snippets via GPT-4

  • Publishing Engine - posts only the approved content to Threads, X, Bluesky, and more

  • Token Refresh - keeps my credentials alive, quietly

The whole thing runs on autopilot. It costs me cents per week. And for every post I write, it generates a cascade of thoughtful, tailored updates for multiple channels.

“One post goes in, sixty platform-ready updates come out — all in my voice.”

🧱 The n8n Data Tables (my miniature content CMS)

n8n’s Data Tables1 were a revelation.

Before them, I was juggling Google Sheets, Notion pages, and duct-taped databases. None of them were native to n8n. None of them felt built for the kind of structured, iterative automation I was dreaming of. I wanted something fast, internal, and purpose-built. Something that didn’t break just because a column name changed.

Data Tables arrived like a breath of fresh air. No more context switching. No more third-party sync issues. Just structured, queryable storage, built directly into the same platform running my automations. It felt like having a lightweight CMS stitched into the bones of my workflow.

I designed my tables like a writer would design a workspace - with intention, clarity, and flow:

  • My Substack Posts - the archive of everything I’ve published. Each row represents a post, with columns like:

    • post_id (number): uniquely identifies the Substack post

    • post_date (datetime): the date of the post publishing

    • post_title (string): the original headline

    • post_link (string): direct link for reference or inclusion

    • description (string): a short preview or blurb

    • content (string): full markdown body for AI processing

    • exhausted (boolean): whether it’s already used for Notes

  • Notes from Posts - the creative goldmine. This is where AI-generated snippets live. Each row is a mini-post or thought derived from a longform Substack piece. Columns include:

    • note_id (string): uniquely identifies created note

    • post_id (number): uniquely identifies the Substack post

    • post_url (string): direct post link

    • post_date (datetime): the date of the post publishing

    • note_platform (string): which channel the note is designed for (X, Threads, Bluesky, Notes)

    • content (string): the actual note content

    • hashtags (string): optional, platform-specific tags

    • approved (boolean): whether it’s approved

    • exhausted (boolean): whether it’s already published

  • Tokens - silent but essential. This table holds OAuth tokens for APIs that require them, especially Threads. Columns like:

    • name (string): name of the token

    • value (string): it’s value

Every table has a clear job. Nothing overlaps. It’s calm. Predictable. Writable by bots. Reviewable by humans.

“Data Tables didn’t just store my content. They made the whole system feel... writable.”

They became the internal language of my automation. And just like paragraphs build a story - rows build a system.

🤖 How automation quietly creates art while you sleep

Every morning, my system breathes into action like a well-trained assistant who knows my rhythms better than I do.

It begins with n8n’s silent scan - a check-in with Substack. Like a librarian reviewing the shelves, it looks for anything new I’ve published. If it finds something, it pulls it in gently and feeds it into GPT-4, my creative apprentice.

This is where the real magic unfolds: the Notes Factory stirs to life. GPT-4 reads the post with more patience than I ever could. It identifies key ideas, distills tone, and transforms my long-form reflections into platform-native gems. Not watered-down versions - reframed perspectives. Some fit the punchiness of X. Others settle into the warmth of Threads. Bluesky gets thoughtful riffs. Substack Notes receives the stripped-down essence.

These pieces - short, sharp, and true to my tone - are deposited into the Notes from Posts Data Table. Each entry knows what it is and where it’s going. The table holds:

  • The note’s text

  • Its target platform

  • Related hashtags

  • Its status (approved, published)

  • The post it came from

And then - my favorite part - a notification. Telegram whispers:

“Your Majesty, I’ve created Notes from [Post Title]. Remember to approve them!”

It always makes me smile. This isn’t a cold automation. It’s a collaboration that respects my creative mood.

I open the table and begin reviewing. Sometimes I change a word. Sometimes I let the note stand. But I’m never starting from scratch. I’m editing - not reinventing. The difference is everything.

When I flip the status to “approved”, the Publishing Engine takes over like a trusted courier. It moves quietly, posting each note where it belongs. Threads. X. Bluesky. Notes. One by one, right on time.

There are no alerts. No extra clicks. No tabs to juggle.

“Automation doesn’t replace your voice. It clears the noise around it.”

And by the time I sip my coffee, my words are already making their way into the world.

🧠 What I learned about creativity, AI, and letting go

This system didn’t just save time. It gave me back a piece of myself.

At first, I thought I was building a productivity tool. But what emerged was something softer - a system that knew how to get out of the way. It didn’t push me to do more. It simply removed the guilt of doing less.

No more mental tax from wondering if I’d reshared a post. No more half-hearted edits to fit platforms I barely had time to engage with. And most importantly, no more creative whiplash - that jarring shift from writing in flow to hacking my own words apart just to make them “fit”.

Instead, I write with a kind of inner permission. I know my voice won’t be diluted by distribution. It will be amplified.

The AI never overwrites my tone. It simply echoes it in smaller frames. Reframes it. Makes it travel.

And in the stillness of this new rhythm, I found something I hadn’t expected: peace. Not just with my process, but with myself.

“I didn’t delegate my creativity. I protected it.”

Now I publish more consistently - not just on Substack, but everywhere. And it doesn’t feel like obligation. It feels like expression finally given the room it deserves.

The system isn’t a shortcut. It’s scaffolding. Built not to replace the artist - but to hold the weight of repetition, so the artist can stay free.


💬 I’d love to hear from you!

Have questions about specific nodes? Got your own spin on this workflow? Or just want to say it sparked something? Leave a comment - I read every one and reply when I can.

Leave a comment


🪄 How you can build yours — a beginner-friendly blueprint

You don’t need to be an engineer. Just curious enough to wire blocks together - and to dream about what it would feel like if distribution didn’t drain you anymore.

Let’s walk through the exact blueprint I built - piece by piece.

1️⃣ Substack Scraper

⏰ Schedule Trigger

This is where the journey begins - the bridge between the words I’ve poured into Substack and the engine that carries them forward. The workflow kicks off with the Schedule Trigger node, configured to run daily at 8am. It’s a deliberate choice - the same hour I often open my laptop with coffee and curiosity. The node needs almost nothing: just a recurrence rule set to daily. That’s it. It’s the morning bell that wakes up the rest of the system.

📰 Substack Node

Next in line is the Substack Node, powered by the community-built n8n-nodes-substack. It fetches my latest posts using the post resource, with a limit of 999 - a generous catch-all that ensures nothing slips through. The credentials use my Substack API key, stored securely. The node returns a clean package of metadata: ID, title, short description, publish date, and URL - the DNA of every article.

📋 Data Table — My Substack Posts

Now the system asks: Are these posts already in my library? To answer, the Data Table Node points to My Substack Posts. It pulls the full table - every post that’s been seen before.

🤝 Merge Node

Then comes the Merge Node, running in advanced mode. It compares post_id from my stored database with id from the fetched previews. If there’s a mismatch - it means we’ve found a new story. Those posts continue on their journey while the rest quietly exit the flow.

🧾 Full Fetch via Substack Node

For each newcomer, a second Substack Node springs to life - this time calling the getPostById operation. It retrieves the complete markdown. This step is crucial: GPT-4 and automation alike need full context to create something meaningful, not fragments.

💾 Upsert to Data Table

Finally, another Data Table Node saves everything back into My Substack Posts. The operation is set to upsert, ensuring no duplicates and perfect continuity. The mapping looks like this:

  • post_id: from id

  • post_title: from title

  • post_link: conditional https:// + url

  • description: from description

  • post_date: from postDate

  • content: from full markdown

By the end, I have a clean, living archive of my longform writing - no duplicates, no gaps, no friction. Each node here plays a tiny role, but together, they build the bridge between creativity and structure.

Keep reading with a 7-day free trial

Subscribe to slys.dev to keep reading this post and get 7 days of free access to the full post archives.

Already a paid subscriber? Sign in
© 2025 Anna & Jakub Slys
Privacy ∙ Terms ∙ Collection notice
Start your SubstackGet the app
Substack is the home for great culture