Skip to content
Platforms

How to Auto-Post an RSS Feed to Bluesky

By , Founder ·

Sources checked on October 12, 2026 · 40 sources

Bluesky does not document a built-in way to import an RSS feed, so a separate tool has to read your feed and create each post through Bluesky’s API. Three tools document doing that today, and one of them is free: the public GitHub Action joschi/blueskyfeedbot, which costs nothing to run on a public repository, on a schedule you set. The other two are paid: IFTTT marks its applet “Post new RSS feed items to Bluesky” with a Pro badge, and Publer, a scheduler, lists RSS automations on its Professional plan.

IFTTT’s and Publer’s documentation say the article is attached as a link. The GitHub Action’s README documents no link card. Publer and the GitHub Action ask for a Bluesky app password, and IFTTT’s public pages do not say how it signs in.

Three ways to post an RSS feed to Bluesky, compared#

The one documented free route comes first.

Route Cost Polling interval in the docs Link card App password needed Did we run it
blueskyfeedbot by joschi, on GitHub Actions Free on a public repository. A private one uses included minutes (2,000 a month on GitHub Free). The cron line you set, no shorter than 5 minutes. GitHub says runs can be delayed or dropped at busy times. Not documented. Yes. No. Docs and source code only.
IFTTT applet “Post new RSS feed items to Bluesky” Paid. The applet, its RSS trigger and its Bluesky action carry a Pro badge, and Pro applets need the Pro or Pro+ plan. Every 5 minutes on Pro and Pro+. Documented for the link-post applet: “an embedded link”. Thumbnail: not documented. Not documented. No. Docs only.
Publer RSS automation Paid: “Unlimited RSS automations” is listed on the Professional plan. The Free plan’s list does not name RSS. Set by Publer’s feed provider: about once a day for a weekly blog, as often as every 5 minutes for a busy news site. Updates “are not always instant”. “The RSS item will be attached as a link.” Publer says a wrong thumbnail on Publer is fixed with your site’s meta tags. Yes. No. Docs only.

For current prices, see IFTTT’s plans page and Publer’s plans page.

Before you start: a feed that validates and a way to sign in#

Check your RSS feed first#

IFTTT’s RSS help page requires a title and a unique link for the feed, and for each entry a date and “A GUID (preferred) or, if no GUID is provided, a unique link”. For a feed that fails, it points to the W3C Feed Validation Service. Publer’s sync page asks for a link or GUID “that has never been used before”, and adds that a wrong pubDate format can stop articles being picked up as new.

What a Bluesky app password is#

Two of the three routes ask for one. It is a second password that you create and revoke separately from your main one. According to the AT Protocol specification, app passwords “grant slightly restricted permissions to the client application, preventing destructive actions like account or changes to authentication settings (including app passwords themselves).”

Create one at bsky.app/settings/app-passwords, the address the blueskyfeedbot README gives. Use the address, because the menu name has changed: Bluesky’s help centre, in an article last edited on August 29, 2023, says “Settings > Advanced > App Passwords”, while the app’s source code on October 12, 2026 lists “App passwords” under “Privacy and Security”.

The create dialog in that source has an option, “Allow access to your direct messages”. An RSS poster creates posts, so leave it off unless the tool asks for it. If you stop using the tool, delete its app password on the same screen.

Route 1: a GitHub Actions bot in your own repository (free on a public repository)#

joschi/blueskyfeedbot describes itself as “a GitHub Action for posting RSS feeds to Bluesky via GitHub Actions workflows.” The README’s steps, in short:

  1. Add an app password and copy it. The README warns: “For security reasons, you won’t be able to view this again.”
  2. Create a new GitHub repository.
  3. Add two repository secrets, BLUESKY_USERNAME (your handle) and BLUESKY_PASSWORD (the app password). The README’s sentence mentions one secret, but the workflow it prints reads these two.
  4. Add the file .github/workflows/blueskyfeedbot.yml with the README’s workflow, then commit and publish.
Excerpt from the joschi/blueskyfeedbot README, not the whole file
on:
  schedule:
    # This will run every five minutes. Alter it using https://crontab.guru/.
    - cron: '*/5 * * * *'
# ...
      - name: GitHub
        uses: 'joschi/blueskyfeedbot@v1'
        with:
          rss-feed: https://www.githubstatus.com/history.rss
          template: |
            {{item.title}}

            {{item.link}}
          username: ${{ secrets.BLUESKY_USERNAME }}
          password: ${{ secrets.BLUESKY_PASSWORD }}
          cache-file: ${{ github.workspace }}/blueskyfeedbot/cache.json
          initial-post-limit: 10
  • Interval. You set it in the cron line. GitHub’s documentation says “The shortest interval you can run scheduled workflows is once every 5 minutes”, that the schedule “can be delayed during periods of high loads”, and that “some queued jobs may be dropped.”
  • Cost. “GitHub Actions usage is free for self-hosted runners and for public repositories that use standard GitHub-hosted runners.” A private repository on GitHub Free has 2,000 included minutes a month, and GitHub rounds each job up to a whole minute. By arithmetic, a run every 5 minutes is about 8,640 runs in a 30-day month and a run every hour about 720, so use a public repository or run hourly in a private one.
  • First run. The action’s inputs include initial-post-limit, “The maximum number of posts created on the first run, if no cache file exists (default: unlimited)”. The README’s example sets it to 10.
  • Link card and length. No card is documented: the README and the inputs name no card option. The source at commit e99a97d, read on October 12, 2026, builds a post record with text, facets, a creation date and an optional language, and no embed. It also cuts text of 300 graphemes or more to its first 300 bytes, because the Bluesky SDK’s slice counts UTF-8 bytes. That is 300 characters for plain English text, and fewer with accents, other scripts or emoji, so keep titles and the template short.

Route 2: an IFTTT applet (Pro plan, checks every 5 minutes)#

The applet is published under the Bluesky service’s name on IFTTT. The page does not say who maintains that service. It describes the applet this way: “Automatically share new RSS feed items to your Bluesky account as link posts. Each time a new item is published on your chosen feed, a post is created with the title, link, and content.”

This is a paid route. IFTTT marks this applet, its RSS trigger “New feed item” and its Bluesky action “Create link post” with a Pro badge, and its help centre says: “Pro Applets can be enabled if you’re on the Pro or Pro+ plan.” Building your own applet from the same two parts does not avoid the plan: “Triggers and Actions with a Pro badge require an IFTTT Pro subscription.”

The steps IFTTT’s pages give:

  1. On a Pro or Pro+ account, open the applet page.
  2. Press Connect. “You can click or tap connect on a published Applet to enable it.”
  3. Add your feed. The applet page says: “Paste your RSS feed URL to get started.”
  • Pick the link-post applet. A community applet with the same name posts text instead, and carries the same Pro badge. The one above uses the action Create link post, which “creates a new post on Bluesky with an embedded link”. Whether the card has a thumbnail, and where its title and description come from, is not documented.
  • Timing. The applet page labels “New feed item” a polling trigger, and trigger checks “occur every 5 minutes for Pro and Pro+ users”.
  • Sign-in. Not documented for Bluesky. IFTTT’s article on connecting a service is generic and does not name Bluesky, and a search of its help centre on October 12, 2026 found no article that mentions Bluesky. You see the method when you press Connect.

Zapier lists the same pairing but marks Bluesky as a Premium app, and Zapier’s help centre lists Premium apps among the features of paid plans.

Route 3: a scheduler with RSS automation (Publer, paid plan)#

Publer’s help centre lists “BlueSky” among the networks where “The RSS item will be attached as a link.”

Publer’s pages disagree about accounts on a custom server. The connect article, updated February 23, 2026, says: “Accounts hosted on a custom PDS (Personal Data Server) are not supported yet.” The managing article, updated February 11, 2025, says: “All Bluesky accounts are supported in Publer.” If your account is on a custom server, ask Publer before you pay.

On Bluesky the card is built by whichever tool creates the post. Bluesky’s developer documentation says: “On Bluesky, each client fetches and embeds this card metadata, including blob upload if needed.” A link in the text is a separate thing from a card.

The card’s schema requires a URI, a title and a description, with an optional thumbnail of at most 1,000,000 bytes. Bluesky’s own example fills them from the page’s og:title, og:description and og:image tags, so a page without those tags gives a tool nothing to put in the card.

So each tool decides, and the Link card column above holds what each one documents.

IFTTT’s general article on missing preview images says “the platform itself determines whether a preview image appears”. It has no Bluesky section, and Bluesky’s documentation describes the opposite, so do not apply it here. The full checklist is in why a Bluesky link preview goes missing.

Limits to stay inside: post length, rate limits and spam rules#

  • Length. Bluesky’s post schema sets maxGraphemes to 300. Check a long title plus its link in the character counter.
  • Rate limits. Bluesky’s rate limits page says “an account may create at most 1,666 records per hour and 11,666 records per day.” By arithmetic a blog feed is far below that. It is not a guarantee: “All of the limits described here are likely to evolve over time.”
  • Sign-ins. The same page limits com.atproto.server.createSession to 300 per day, per account. blueskyfeedbot’s source signs in on every run that is not a dry run, so the README’s five-minute schedule comes to 288 sign-ins a day. A longer interval leaves more room.
  • Spam. Bluesky’s Developer Guidelines count as spam “Generating automated or bulk interactions, including any that would cause a notification to a user like a message, follow, like or reply”. The Community Guidelines add: “Do not send spam or repeatedly post content in ways that disrupt normal conversations or service use.”
  • Bot label. “As a best practice, bot accounts should identify themselves by adding a self-label to their profile.” None of the three tools documents setting it.

Frequently asked questions#

Does Bluesky have a built-in way to import an RSS feed?#

Not documented. A search of Bluesky’s help centre for “rss” on October 12, 2026 returned one article, “What is Bluesky?”, which mentions RSS only as a comparison. The developer documentation describes creating posts through the API after signing in, so a separate tool does the reading and the posting.

Can I auto-post an RSS feed to Bluesky for free?#

One free route is documented: a GitHub Actions bot such as blueskyfeedbot on a public repository, while IFTTT’s applet needs Pro or Pro+, Zapier marks Bluesky as a Premium app and Publer lists RSS automations on its paid Professional plan.

Will my old articles be posted when I first connect the feed?#

It depends on the tool. blueskyfeedbot posts up to initial-post-limit items on its first run, and its dry-run input will “Only fetch RSS feed and update cache but skip posting to Bluesky”. IFTTT’s RSS help page gives the example of an entry published on 2021-11-09 and updated two weeks later, and says “a new connection created with IFTTT after the 9th wouldn’t trigger in this case.” Publer automates only articles published after you connect the feed.

Why did my feed post the same article twice?#

IFTTT’s help centre says a changed GUID on an existing item “would cause the Applet to Trigger again”, so keep each item’s GUID and link stable. For the GitHub Actions bot, see the two GitHub rules under Route 1.

Sources 40

ShowHide

Each page was read on the date beside it. The quoted sentence is the one this post relies on.

  1. IFTTT applet page: "Post new RSS feed items to Bluesky" (the link-post applet; the page shows a Pro badge on the applet, on the trigger "New feed item" and on the action "Create link post") ifttt.com

    “Automatically share new RSS feed items to your Bluesky account as link posts. Each time a new item is published on your chosen feed, a post is created with the title, link, and content. [...] Paste your RSS feed URL to get started. [...] New feed item [...] Polling trigger [...] This Trigger fires every time a new item is added to the feed you specify.”

    Checked

  2. IFTTT applet page: the applet of the same name by a community author (text post; the page shows the same Pro badge) ifttt.com

    “Automatically share each new RSS feed item as a text post on Bluesky. Whenever a new entry appears in your chosen feed, it will be posted to your Bluesky account with its title, link, and content.”

    Checked

  3. IFTTT action page: Bluesky "Create link post" ifttt.com

    “This action creates a new post on Bluesky with an embedded link.”

    Checked

  4. IFTTT plans page (the three plan cards; line breaks shown as slashes) ifttt.com

    “$0.00 / forever / Get started with automation. / 2 Applets / Standard Applet speeds [...] 20 Applets / Fastest Applet speeds [...] Unlimited Applets / Everything in Pro”

    Checked

  5. IFTTT help: "What is the difference between polling Applets and realtime Applets?" (updated September 24, 2026) help.ifttt.com

    “These trigger checks occur every 5 minutes for Pro and Pro+ users, and every hour for Free users. [...] Because of the reactive nature of polling triggers, we expect polling Applets to run within 5 minutes of a trigger event occurring for Pro and Pro+ users, and within one hour for Free users.”

    Checked

  6. IFTTT help: "My RSS feed isn't working or updating" (updated May 11, 2026) help.ifttt.com

    “A tool like the W3C Feed Validation Service may provide some insight into why your feed isn't validating. [...] A GUID (preferred) or, if no GUID is provided, a unique link [...] Applets are triggered by newly published content, while items that have only been updated may be ignored. [...] The originator of the feed content may list entries based on when they were updated, but a new connection created with IFTTT after the 9th wouldn't trigger in this case.”

    Checked

  7. IFTTT help: "How to Stop the RSS Feed From Posting Duplicate Entries" (updated August 21, 2026) help.ifttt.com

    “If your feed passes W3C validation but duplicate posts still persist, this could be due to the change in the GUID of an existing feed item, which would cause the Applet to Trigger again.”

    Checked

  8. IFTTT help: "How to Fix Missing Link Preview Images on Social Media" (edited June 12, 2025; no Bluesky section) help.ifttt.com

    “IFTTT sends the URL to the social media platform, but the platform itself determines whether a preview image appears.”

    Checked

  9. IFTTT help: "Connecting to a service on IFTTT" (edited March 16, 2022) help.ifttt.com

    “You will be redirected to the service for authorization [...] Enter your username and password, or use credentials from an OAuth service if supported (e.g. Sign in with Google)”

    Checked

  10. Zapier: Bluesky and RSS by Zapier integration page zapier.com

    “Create posts in Bluesky from new items in RSS by Zapier feed [...] Premium”

    Checked

  11. Zapier help: "What's included in Zapier's Free plan?" help.zapier.com

    “When you sign up for a Zapier account, you’ll get a 14-day trial to explore the premium features of a paid plan. [...] Paid plans allow you to use premium features, such as: Premium apps: Use some of the most popular apps with Zapier.”

    Checked

  12. joschi/blueskyfeedbot: README github.com

    “Bluesky Feed Bot is a GitHub Action for posting RSS feeds to Bluesky via GitHub Actions workflows. [...] Go to https://bsky.app/settings/app-passwords and add a new app password. [...] For security reasons, you won't be able to view this again.”

    Checked

  13. joschi/blueskyfeedbot: action.yml, the documented inputs github.com

    “description: 'The maximum number of posts created on the first run, if no cache file exists (default: unlimited)' [...] description: 'Only fetch RSS feed and update cache but skip posting to Bluesky' [...] description: 'Disable automatic detection of rich text facets'”

    Checked

  14. joschi/blueskyfeedbot: source code at commit e99a97d (October 9, 2026), src/index.ts github.com

    “if (rt.graphemeLength >= 300) { rt = new RichText({ text: rt.unicodeText.slice(0, 300) }); } [...] const record: AppBskyFeedPost.Record = { $type: 'app.bsky.feed.post', text: rt.text, facets: rt.facets, createdAt: new Date().toISOString(), ...(lang && { langs: [lang] }) };”

    Checked

  15. GitHub Docs: Events that trigger workflows, "schedule" docs.github.com

    “The schedule event can be delayed during periods of high loads of GitHub Actions workflow runs. High load times include the start of every hour. If the load is sufficiently high enough, some queued jobs may be dropped. [...] The shortest interval you can run scheduled workflows is once every 5 minutes.”

    Checked

  16. GitHub Docs: Disabling and enabling a workflow docs.github.com

    “In a public repository, scheduled workflows are automatically disabled when no repository activity has occurred in 60 days.”

    Checked

  17. GitHub Docs: GitHub Actions billing (the table under the second sentence gives GitHub Free 2,000 minutes a month) docs.github.com

    “GitHub Actions usage is free for self-hosted runners and for public repositories that use standard GitHub-hosted runners. [...] The following amounts of time for standard runners, artifact storage, and cache storage are included in your GitHub plan.”

    Checked

  18. GitHub Docs: Actions runner pricing docs.github.com

    “GitHub rounds the minutes and partial minutes each job uses up to the nearest whole minute.”

    Checked

  19. GitHub Docs: Dependency caching, usage limits and eviction policy docs.github.com

    “GitHub will remove any cache entries that have not been accessed in over 7 days.”

    Checked

  20. Publer help: "How to auto-schedule or auto-post the new RSS Feed articles" (updated May 20, 2026) publer.com

    “Go to Explore tab on Publer. [...] Next time a new article is pulled, it will be published to the social media channels you chose, right away. [...] Finally, decide if you want a posting delay or not and Save the changes.”

    Checked

  21. Publer help: "RSS Feeds in Publer" (updated June 27, 2026) publer.com

    “Only the new articles can be automated, not the existing ones. New articles are all the articles that are published after connecting yours RSS feed to Publer. [...] Each article will be auto-shared or auto-published only once. [...] Some RSS Feeds might not always show the correct thumbnail for their articles on Publer. In this case, you have to make sure that your site has the correct Meta Tags set up.”

    Checked

  22. Publer help: "How will RSS items be shared to each social network" (updated June 25, 2026; line break shown as a slash) publer.com

    “On Facebook, Twitter, Mastodon, Threads, BlueSky, and LinkedIn / The RSS item will be attached as a link.”

    Checked

  23. Publer help: "How to sync RSS Feed articles" publer.com

    “The frequency at which articles from RSS Feeds are synced to Publer is managed entirely by our third-party RSS service provider, not by Publer itself. [...] For example, a blog that publishes one article per week may be checked once per day, while a news website that publishes many articles throughout the day may be checked as often as every 5 minutes. [...] Keep in mind that RSS Feed updates are not always instant. [...] each article must have a unique URL (link) or GUID (Globally Unique Identifier) that has never been used before. [...] We recommend adjusting your website's RSS settings to output a higher number of recent articles (at least 10–20).”

    Checked

  24. Publer help: "How to connect Bluesky accounts" (updated February 23, 2026) publer.com

    “Enter your username (e.g. username.bsky.social) and click on Generate app password in Bluesky. [...] At the moment, only Bluesky accounts hosted directly on Bluesky (e.g. username.bsky.social) can be connected to Publer. Accounts hosted on a custom PDS (Personal Data Server) are not supported yet.”

    Checked

  25. Publer help: "Managing Bluesky accounts in Publer" (updated February 11, 2025) publer.com

    “All Bluesky accounts are supported in Publer.”

    Checked

  26. Publer plans page ("Unlimited RSS automations" is in the Professional plan's list, "Free trials on paid features" in the Free plan's) publer.com

    “Connect unlimited RSS Feeds and Publer will automatically publish or schedule new posts from those feeds for you.”

    Checked

  27. Bluesky developer docs: Bluesky API, get started bsky.network

    “Log in with your handle and an app password to create an authentication session. (Use an app password rather than your main account password.)”

    Checked

  28. Bluesky developer docs: "Posts in-depth" bsky.network

    “Mentions and links are annotations that point into the text of a post. [...] A website card embed, often called a "social card," is the rendered preview of a website link. [...] # parse out the "og:title" and "og:description" HTML meta tags [...] # if there is an "og:image" HTML meta tag, fetch and upload that image [...] On Bluesky, each client fetches and embeds this card metadata, including blob upload if needed.”

    Checked

  29. Bluesky developer docs: "Rate Limits" (table rows shown with slashes) bsky.network

    “All of the limits described here are likely to evolve over time. [...] The limit is 5,000 points per hour and 35,000 points per day. [...] CREATE / 3 points [...] Under this system, an account may create at most 1,666 records per hour and 11,666 records per day. [...] com.atproto.server.createSession / Measured per account / 30 per 5 minutes / 300 per day”

    Checked

  30. Bluesky developer docs: "Developer Guidelines" bsky.network

    “Generating automated or bulk interactions, including any that would cause a notification to a user like a message, follow, like or reply”

    Checked

  31. AT Protocol specification: HTTP API (XRPC), "App Passwords" atproto.com

    “App Passwords are a mechanism to reduce security risks when logging in to third-party clients and web applications. Accounts can create and revoke app passwords separate from their primary password. They are used to log in the same way as the primary password, but grant slightly restricted permissions to the client application, preventing destructive actions like account or changes to authentication settings (including app passwords themselves). [...] App passwords usually have the form xxxx-xxxx-xxxx-xxxx”

    Checked

  32. AT Protocol guide: "Create a bot that automatically posts on Bluesky" atproto.com

    “As a best practice, bot accounts should identify themselves by adding a self-label to their profile.”

    Checked

  33. Bluesky post schema: the app.bsky.feed.post lexicon github.com

    “"maxLength": 3000, "maxGraphemes": 300,”

    Checked

  34. Bluesky link-card schema: the app.bsky.embed.external lexicon github.com

    “"required": ["uri", "title", "description"], [...] "maxSize": 1000000”

    Checked

  35. Bluesky help centre: "Miscellaneous" (last edited August 29, 2023) blueskyweb.zendesk.com

    “Please generate an App Password via Settings > Advanced > App Passwords to login to any third-party apps.”

    Checked

  36. Bluesky app source code: the app passwords screen, with its add dialog and the settings menu in the same folder (bluesky-social/social-app, main branch) github.com

    “Use app passwords to sign in to other Bluesky clients without giving full access to your account or password.”

    Checked

  37. Bluesky Community Guidelines (last updated September 19, 2025) bsky.social

    “Do not send spam or repeatedly post content in ways that disrupt normal conversations or service use.”

    Checked

  38. IFTTT help: "How to tell if a service requires a Pro or Pro+ plan to use" (edited December 4, 2025) help.ifttt.com

    “Triggers and Actions without a badge are available on all tiers, including Free. [...] Triggers and Actions with a Pro badge require an IFTTT Pro subscription.”

    Checked

  39. IFTTT help: "What is a Pro/Pro+ Applet?" (edited September 23, 2026) help.ifttt.com

    “You can click or tap connect on a published Applet to enable it. [...] Pro Applets may include multiple Actions, use a Trigger or Action from a service that requires a Pro subscription, or both. These Applets will show a Pro badge in the bottom right corner of the Applet card. Pro Applets can be enabled if you're on the Pro or Pro+ plan. [...] Free Applets won't have any badge in the bottom right and can be enabled by all users”

    Checked

  40. Bluesky SDK source code: UnicodeString.slice in @atproto/api, the method behind unicodeText.slice (bluesky-social/atproto, main branch) github.com

    “slice(start?: number, end?: number): string { return decoder.decode(this.utf8.slice(start, end)) }”

    Checked

Get your weekends back. Let AI handle your social.

Join the waitlist and lock in 30% off for life.

  • Founding price for life
  • No credit card
  • Unsubscribe anytime