1. Finding Your Blogโs Native RSS Endpoint
Almost every modern publishing platform provides a public RSS feed URL that outputs standardized XML data. You do not need any special API keys:
| Platform | Feed URL Format | Example |
|---|---|---|
| Substack | https://[subdomain].substack.com/feed | https://pragmaticengineer.substack.com/feed |
| Medium | https://medium.com/feed/@[username] | https://medium.com/feed/@torvalds |
| Dev.to | https://dev.to/feed/[username] | https://dev.to/feed/thepracticaldev |
| Hashnode | https://[domain]/rss.xml | https://engineering.hashnode.dev/rss.xml |
| Ghost / WP | https://[domain]/rss or /feed | https://blog.cloudflare.com/rss |
2. Step-by-Step GitHub Actions Workflow
Create a new workflow file at .github/workflows/blog-sync.yml inside your username/username repository:
name: Sync Blog Posts to Readme
on:
schedule:
- cron: '0 0 * * *' # Executes daily at midnight UTC
workflow_dispatch: # Allows manual trigger from Actions tab
permissions:
contents: write # Grants GITHUB_TOKEN write access to commit changes
jobs:
sync-posts:
name: Pull RSS and Update Markdown
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Fetch RSS Feeds
uses: gautamkrishnar/blog-post-workflow@v1
with:
feed_list: "https://yournewsletter.substack.com/feed, https://dev.to/feed/yourhandle"
max_post_count: 5
date_format: "mmm d, yyyy"
template: "$newline- ๐ [$title]($url) - *$date*"3. Markdown Markers & Custom Template Tokens
Inside your README.md, place the opening and closing HTML comment tags:
### โ๏ธ Latest Articles & Technical Deep Dives <!-- BLOG-POST-LIST:START --> <!-- BLOG-POST-LIST:END -->
The template parameter supports powerful interpolation tokens to customize the generated Markdown output:
$title: The sanitized title of the blog post.$url: The direct canonical link to the article.$date: Formatted publication date according todate_format.$description: Short summary or excerpt of the article.$newline: Inserts a newline break between feed items.
4. Troubleshooting Common Sync Failures
Cloudflare WAF / 403 Forbidden:
If your personal custom blog is protected by Cloudflare Under Attack mode or strict WAF bot challenges, GitHub Action runner IPs may be blocked. Add a custom user-agent in the action config (user_agent: "Mozilla/5.0 ProfileSyncBot") or whitelist GitHub Action IP blocks.
Empty / Blank Section:
Ensure there are no spaces or typographical errors in your comment markers. The workflow matches the exact regex <!-- BLOG-POST-LIST:START -->.
Generate Full-Featured Profiles with ProfileCrest
Use ProfileCrest to combine blog syndication, tech stack badges, and contribution stats into a cohesive layout.
๐ Launch ProfileCrest Generator