🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Bluesky + Google Sheets: welcome DMs, tracked

Lisa Granqvist Partner Workflow Automation Expert

You gain a few new Bluesky followers, you mean to send a quick welcome DM… and then the day happens. Later you can’t remember who you messaged, who you missed, or if you accidentally double-sent.

This hits marketers who are trying to build relationships early. A solo founder feels it too, because every DM is “sales” in disguise. And community folks end up stuck in the same loop. This Bluesky DM tracking automation keeps you consistent without turning your mornings into admin work.

You’ll see how the workflow checks for new followers hourly, sends a welcome message to only the new ones, and logs each send so you always know what happened.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Bluesky + Google Sheets: welcome DMs, tracked

The Problem: Welcome DMs Don’t Scale Manually

Sending welcome DMs sounds simple until you try to do it every day. Bluesky doesn’t politely line up new followers for you with a “processed” checkmark, so you end up bouncing between your follower list, your messages, and whatever notes you keep (if you keep notes). Miss a day and you’re suddenly backscrolling through names, second-guessing yourself. Double-message a few people and it starts to feel spammy. Skip it entirely and you lose the easiest “first touch” moment you get.

The friction compounds, especially once you’re growing.

  • You spend about 10 minutes just figuring out who is actually new.
  • It’s easy to DM the same person twice when your follower list changes quickly.
  • Manual outreach gets inconsistent, which means your “welcome” becomes a random event instead of a dependable system.
  • There’s no clean record for later, so you can’t tell what message was sent or when.

The Solution: Auto-send Bluesky Welcome DMs and Track Them

This n8n workflow runs on a schedule (every 60 minutes), checks your Bluesky account for followers, compares that list to what it has already seen, and identifies only the new people. For each new follower, it composes your welcome message, opens or finds the correct DM conversation, and sends the message automatically. Then it updates its saved follower list so the same person won’t trigger again next hour. In practice, you get a steady stream of “always-on” introductions without living inside your inbox.

The workflow starts with an hourly trigger and creates a Bluesky session (using your app password). It pulls the latest followers, loads your previously saved follower list, and flags the difference. Finally, it batches through new followers, sends DMs, waits briefly to stay polite to the API, then writes the updated list back to storage.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you average 10 new followers a day. Manually, you might spend about 2 minutes per person to confirm they’re new, open a DM, paste a message, and then track it somewhere, which comes out to roughly 20 minutes daily. With this workflow, the “work” is basically zero: it checks every 60 minutes, messages only the new followers, and updates the stored list automatically. You get your time back, and the welcome habit stops depending on your memory.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Bluesky for follower checks and private messages.
  • Google Sheets to log each DM send and timestamp.
  • Bluesky app password (create it in Bluesky settings with DM access).

Skill level: Beginner. You’ll add credentials, paste a message, and run one setup node once to create the initial follower list.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

Hourly check-in. A schedule trigger runs every 60 minutes and starts a new session with Bluesky via HTTP Request.

Follower comparison. The workflow retrieves your current followers, then reads a saved file that contains the follower list from the last successful run. A small code step detects who’s new.

DM sending in batches. New followers are split out and processed in batches. For each person, n8n sets the welcome message text, fetches the conversation ID, then dispatches the DM. There’s also a brief wait to reduce the chance of rate-limit headaches.

Tracking and “no duplicates.” After messaging, the workflow serializes the updated follower list and writes it back to the file, so the next hourly run has a clean baseline. If you’re also curious about alternate tracking backends, the approach is similar to Bluesky + Baserow: welcome DMs, no duplicates, just stored differently.

You can easily modify the message text to match your tone (or add multiple variants) based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Schedule Trigger

Set the workflow to run on an hourly cadence using the built-in schedule trigger.

  1. Add and open Hourly Schedule Trigger.
  2. Set the interval rule to Minutes with 60 in the minutesInterval field.
  3. Connect Hourly Schedule Trigger to Initiate Session.

Keep the trigger interval aligned with your follower growth rate to avoid rate limits in the API.

Step 2: Connect Bluesky Session and Follower Retrieval

Authenticate against Bluesky and pull the latest followers list.

  1. Open Initiate Session and set URL to https://bsky.social/xrpc/com.atproto.server.createSession.
  2. Set Method to POST and enable Send Body.
  3. In Body Parameters, set identifier to [YOUR_ID] and password to [CONFIGURE_YOUR_TOKEN].
  4. Open Retrieve Followers and set URL to https://bsky.social/xrpc/app.bsky.graph.getFollowers.
  5. Enable Send Query and set actor to {{ $json.did }}, limit to 100.
  6. Enable Send Headers and set Authorization to Bearer {{ $item("0").$node["Initiate Session"].json["accessJwt"] }}.
  7. Configure pagination cursor to {{ $response.body.cursor }} with a request interval of 250 and max requests 2.

⚠️ Common Pitfall: Ensure your identifier and token are valid; failed sessions will break downstream follower retrieval.

Step 3: Load Stored Followers and Detect New Ones

Read the stored follower file, parse it, and compare against the latest followers to find new DIDs.

  1. In Read Followers File, set File Selector to =followers-{{ $('Initiate Session').item.json.handle }}.json.
  2. Connect Read Followers File to Load From File and set Operation to fromJson.
  3. Open Detect New Followers and keep the provided JavaScript that compares Retrieve Followers and Load From File data.
  4. Verify Detect New Followers outputs newDids and count for downstream processing.

If the file doesn't exist on first run, initialize a JSON file with an empty followers array to prevent parse errors.

Step 4: Configure Batching and Welcome Message Composition

Split new follower IDs into individual records, batch them, and prepare the welcome message content.

  1. In Distribute Records, set Field to Split Out to newDids and keep destinationFieldName as did.
  2. Connect Distribute Records to Batch Through Items to throttle output.
  3. Open Compose Welcome Note and set text to Hello, thanks for your follow. You can read more about my over my site:.
  4. Set link to https://example.com in Compose Welcome Note.

Update the welcome text and link to match your profile and landing page before going live.

Step 5: Send Welcome Messages via Chat API

Fetch a conversation ID for each new follower, then send a formatted message with a link.

  1. Open Fetch Conversation ID and set URL to {{ $item("0").$node["Initiate Session"].json.didDoc.service[0].serviceEndpoint }}/xrpc/chat.bsky.convo.getConvoForMembers.
  2. Set members query parameter to {{ $('Distribute Records').item.json.did }} and add headers Authorization and Atproto-Proxy.
  3. Open Dispatch Message and set URL to {{ $item("0").$node["Initiate Session"].json.didDoc.service[0].serviceEndpoint }}/xrpc/chat.bsky.convo.sendMessage.
  4. Keep Method as POST and Specify Body as json.
  5. Use the provided jsonBody expression to build the message with {{ $('Compose Welcome Note').item.json.text }} and {{ $('Compose Welcome Note').item.json.link }}.
  6. Ensure headers include Authorization and Atproto-Proxy as configured.

⚠️ Common Pitfall: The byte index calculation in the link facet relies on the exact text length—changing the welcome note text without updating length expressions can break link rendering.

Step 6: Persist Followers File and Handle Parallel Execution

Save the latest followers list to file while also pacing execution through a wait step.

  1. Retrieve Followers outputs to both Read Followers File and Pause Execution in parallel.
  2. Open Pause Execution to control flow timing, then connect it to Serialize to File.
  3. In Serialize to File, set Operation to toJson and keep the file name option if needed.
  4. In Write Followers File, set Operation to write and File Name to =followers-{{ $('Initiate Session').item.json.handle }}.json.
  5. Keep No-Op Placeholder connected for future expansion or debugging.

Parallel execution means file read and wait happen together; ensure your file paths are correct to prevent missing data on each run.

Step 7: Test and Activate Your Workflow

Validate the end-to-end flow and then enable the schedule for production runs.

  1. Click Execute Workflow to run a manual test starting from Hourly Schedule Trigger.
  2. Confirm Retrieve Followers returns follower data and Detect New Followers outputs a newDids array.
  3. Verify Fetch Conversation ID returns a convo ID and Dispatch Message completes successfully.
  4. Check that Write Followers File creates or updates the file named followers-{{ $('Initiate Session').item.json.handle }}.json.
  5. Turn on the workflow using the Active toggle to enable hourly automation.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Bluesky credentials can expire or lack the right permissions. If messages stop sending, check the app password settings (and DM access) first.
  • If you’re using Wait nodes or external delays, processing times vary. Bump up the wait duration if downstream HTTP calls fail because the conversation isn’t ready yet.
  • Your default welcome text will feel generic fast. Update the “Compose Welcome Note” content early with your voice, or you’ll be rewriting messages by hand anyway.

Frequently Asked Questions

How long does it take to set up this Bluesky DM tracking automation?

About 30 minutes if you already have your Bluesky app password ready.

Do I need coding skills to automate Bluesky DM tracking?

No coding required. You’ll connect credentials, edit the welcome message text, and run the one-time “save followers” setup.

Is n8n free to use for this Bluesky DM tracking workflow?

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 any hosting costs if you self-host.

Where can I host n8n to run this automation?

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.

Can I customize this Bluesky DM tracking workflow for different messages per follower type?

Yes, but you’ll need a rule to classify followers. Common customizations include changing the “Compose Welcome Note” text based on keywords, adding an If node to route different messages, or adjusting the schedule frequency if you want faster replies.

Why is my Bluesky connection failing in this workflow?

Most of the time it’s the app password. Regenerate it with private message permissions, then update the credentials used by the HTTP Request nodes that initiate the session and send the DM. Also check Bluesky’s createSession rate limits if you increased the schedule too aggressively. Finally, confirm the workflow isn’t running multiple copies at once (for example, after importing and testing), because parallel runs can cause confusing authentication errors.

How many followers can this Bluesky DM tracking automation handle?

For most small accounts, it handles daily follower growth easily; the main constraint is Bluesky API rate limits rather than n8n.

Is this Bluesky DM tracking automation better than using Zapier or Make?

Often, yes, because this pattern relies on saved state (the follower list) and a bit more control over batching, waits, and conditional logic. n8n makes that kind of workflow straightforward without turning every extra step into an extra paid task. Zapier or Make can still work if you keep it very simple, but you may end up fighting “duplicate prevention” or storage limitations. If you’re aiming for reliable tracking over time, n8n is usually the calmer option. Talk to an automation expert if you want help choosing.

Once this is running, welcome messages happen quietly in the background, and you stop worrying about duplicates. Set it up once, then spend your attention on real conversations.

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.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal