This workflow corresponds to n8n.io template #15643 — we link there as the canonical source.
This workflow follows the GitHub → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"id": "7cda91ee-7ca0-4412-82d0-c6d974f2c052",
"name": "README \u2013 Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-176,
-96
],
"parameters": {
"color": 7,
"width": 500,
"height": 712,
"content": "## \ud83d\udcca n8n Creator Stats Card\n**Automatically generates and pushes an SVG profile badge to GitHub, showing your n8n creator stats \u2014 perfect for embedding in a GitHub README.**\n\n---\n\n### \ud83d\udc64 Who is this for?\nAnyone who publishes templates on n8n.io and wants a live stats badge on their GitHub profile or repository README.\n\n---\n\n### \u2699\ufe0f How it works\n1. **Schedule Trigger** fires on your chosen interval (default: daily)\n2. **Config** \u2014 single node where you set all your personal details\n3. **Fetch Creator Profile** \u2014 pulls your stats from the n8n community API\n4. **Parse User** \u2014 extracts name, avatar URL, and workflow counts\n5. **Download & Encode Avatar** \u2014 fetches your avatar image and converts it to Base64\n6. **Build SVG** \u2014 assembles a styled 495\u00d7190px SVG card with your stats\n7. **GitHub Push** \u2014 edits the existing file, or creates it if it doesn't exist yet\n8. **Final URLs** \u2014 outputs the raw and CDN-cached URLs to embed\n\n---\n\n### \ud83d\ude80 Setup (5 steps)\n1. Open the **\u2699\ufe0f Config** node and fill in all 7 fields\n2. Add your **GitHub credentials** to both GitHub nodes (Edit & Create)\n3. Make sure the target GitHub repository exists and is **public**\n4. *(Optional)* Adjust the **Schedule Trigger** interval\n5. **Activate** the workflow \u2014 it will run automatically going forward\n\n---\n\n### \ud83d\uddbc\ufe0f Embed in your README\n```\n\n```"
},
"typeVersion": 1
},
{
"id": "9a61cdc2-4b7d-4fc5-a6d0-eee7d7b283d9",
"name": "Note \u2013 Config Section",
"type": "n8n-nodes-base.stickyNote",
"position": [
528,
112
],
"parameters": {
"color": 4,
"width": 260,
"height": 100,
"content": "### \ud83d\udd27 Step 1 \u2014 Configure\nEdit the **\u2699\ufe0f Config** node below.\nFill in every field before activating."
},
"typeVersion": 1
},
{
"id": "a321bd7f-82c7-4575-bea0-eeeb0d1b725a",
"name": "Note \u2013 Fetch Section",
"type": "n8n-nodes-base.stickyNote",
"position": [
848,
112
],
"parameters": {
"color": 5,
"width": 300,
"height": 120,
"content": "### \ud83c\udf10 Step 2 \u2014 Fetch & Parse\nRetrieves your public creator profile\nfrom the n8n community API and\nextracts name, avatar, and workflow counts."
},
"typeVersion": 1
},
{
"id": "ce13f560-e72a-404f-95f3-b23f38dd267d",
"name": "Note \u2013 SVG Section",
"type": "n8n-nodes-base.stickyNote",
"position": [
1248,
112
],
"parameters": {
"color": 6,
"width": 300,
"height": 110,
"content": "### \ud83d\uddbc\ufe0f Step 3 \u2014 Build SVG\nDownloads your avatar, encodes it\nto Base64, then assembles the\nfull SVG stats card."
},
"typeVersion": 1
},
{
"id": "19058e58-d618-4257-9f7d-8e7a551c8f7d",
"name": "Note \u2013 GitHub Section",
"type": "n8n-nodes-base.stickyNote",
"position": [
1824,
32
],
"parameters": {
"color": 3,
"width": 300,
"height": 140,
"content": "### \ud83d\udce4 Step 4 \u2014 Push to GitHub\nTries to **edit** the existing file first.\nIf the file doesn't exist yet, the error\noutput routes to **Create** instead.\n\n\u26a0\ufe0f Add GitHub credentials to **both** nodes."
},
"typeVersion": 1
},
{
"id": "af926830-51a6-4f0f-9857-e8abadaa2a73",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
384,
288
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.1
},
{
"id": "3232f21a-03ec-4d97-b160-be439324d8a4",
"name": "\u2699\ufe0f Config",
"type": "n8n-nodes-base.set",
"position": [
608,
288
],
"parameters": {
"fields": {
"values": [
{
"name": "n8n_creator_username",
"stringValue": "YOUR_N8N_COMMUNITY_USERNAME"
},
{
"name": "text_color_hex",
"stringValue": "#ffffff"
},
{
"name": "icons_color_hex",
"stringValue": "#ffffff"
},
{
"name": "border_color_hex",
"stringValue": "#ffffff"
},
{
"name": "card_color_hex",
"stringValue": "#3369b3"
},
{
"name": "github_username",
"stringValue": "YOUR_GITHUB_USERNAME"
},
{
"name": "github_repository",
"stringValue": "YOUR_GITHUB_REPOSITORY"
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "2aa177c2-32a3-4c2d-8c13-e47e029c00c1",
"name": "Fetch Creator Profile",
"type": "n8n-nodes-base.httpRequest",
"position": [
864,
288
],
"parameters": {
"url": "=https://n8n-s4.nskha.com/creators/{{ $json['n8n_creator_username'] }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "user-agent",
"value": "+https://openai.com/bot"
}
]
}
},
"typeVersion": 4.1
},
{
"id": "44a38753-78a5-48f6-bfde-92a0c01a68ec",
"name": "Parse Creator Data",
"type": "n8n-nodes-base.code",
"position": [
1088,
288
],
"parameters": {
"jsCode": "const d = items[0].json.data || items[0].json;\n\nconst name = d.name || d.username || 'Creator';\nconst avatar = d.avatar\n ? d.avatar.replace('size=200', 'size=100')\n : `https://api.dicebear.com/7.x/initials/png?seed=${encodeURIComponent(name)}&backgroundColor=ea4b71&textColor=ffffff`;\n\nconst total = d.workflowsCount || 0;\nconst approved = d.workflowsCount || 0;\n\nreturn [{ json: { name, avatar, total, approved } }];"
},
"typeVersion": 2
},
{
"id": "e14cb4b9-bb4b-484d-8595-261e0b795aa2",
"name": "Download Avatar",
"type": "n8n-nodes-base.httpRequest",
"position": [
1264,
288
],
"parameters": {
"url": "={{ $json.avatar }}",
"options": {}
},
"typeVersion": 4.1
},
{
"id": "6de52db1-457f-45e0-ad41-16c652dca0ce",
"name": "Encode Avatar to Base64",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1472,
288
],
"parameters": {
"options": {},
"operation": "binaryToPropery",
"destinationKey": "imgdata"
},
"typeVersion": 1
},
{
"id": "029f4f7b-d669-45a2-a370-5a6c113d3677",
"name": "Build SVG Card",
"type": "n8n-nodes-base.set",
"position": [
1664,
288
],
"parameters": {
"fields": {
"values": [
{
"name": "svg",
"stringValue": "=<svg width=\"495\" height=\"190\" viewBox=\"0 0 495 190\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<style>\n<![CDATA[\n.text{ font-family: Tahoma, Geneva, Verdana, sans-serif; fill: {{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"text_color_hex\"] }}; font-size: 13px;}\n.sub{ font-family: Tahoma, Geneva, Verdana, sans-serif; fill: {{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"text_color_hex\"] }}; font-size: 11px; opacity:0.75;}\n.namepl{ font-family: Helvetica, sans-serif; fill: {{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"text_color_hex\"] }}; font-size: 15px; font-weight: 600; text-anchor: middle;}\n.icon{ fill: {{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"icons_color_hex\"] }};}\n.row{ opacity:0; animation: fade 0.3s ease-in-out forwards;}\n@keyframes fade{ from{opacity:0.5;} to{opacity:1;}}\n]]>\n</style>\n<rect x=\"0.5\" y=\"0.5\" rx=\"4.5\" height=\"99%\" width=\"494\" fill=\"{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"card_color_hex\"] }}\" stroke=\"{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"border_color_hex\"] }}\" stroke-opacity=\"1\"/>\n<g transform=\"translate(0,20)\">\n <defs>\n <pattern id=\"av\" x=\"0%\" y=\"0%\" height=\"100%\" width=\"100%\" viewBox=\"0 0 100 100\">\n <image x=\"0%\" y=\"0%\" width=\"100\" height=\"100\" xlink:href=\"data:image/png;base64,{{ $item(\"0\").$node[\"Encode Avatar to Base64\"].json.imgdata }}\"></image>\n </pattern>\n </defs>\n <circle cx=\"76\" cy=\"52\" r=\"44\" fill=\"{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"border_color_hex\"] }}\"/>\n <circle cx=\"76\" cy=\"52\" r=\"42\" fill=\"url(#av)\"/>\n <text x=\"76\" y=\"112\" class=\"namepl\">{{ $item(\"0\").$node[\"Parse Creator Data\"].json.name }}</text>\n <text x=\"76\" y=\"130\" class=\"sub\" text-anchor=\"middle\">n8n Creator</text>\n <line x1=\"160\" y1=\"10\" x2=\"160\" y2=\"160\" stroke=\"{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"border_color_hex\"] }}\" stroke-width=\"0.5\"/>\n <g class=\"row\" style=\"animation-delay:100ms\" transform=\"translate(175,15)\">\n <svg class=\"icon\" viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" y=\"1\"><path fill-rule=\"evenodd\" d=\"M0 1.75A.75.75 0 01.75 1h4.253c1.227 0 2.317.59 3 1.501A3.744 3.744 0 0111.006 1h4.245a.75.75 0 01.75.75v10.5a.75.75 0 01-.75.75h-4.507a2.25 2.25 0 00-1.591.659l-.622.621a.75.75 0 01-1.06 0l-.622-.621A2.25 2.25 0 005.258 13H.75a.75.75 0 01-.75-.75V1.75z\"/></svg>\n <text class=\"text\" x=\"22\" y=\"13\">Total Workflows</text>\n <text class=\"text\" font-weight=\"700\" x=\"295\" y=\"13\" text-anchor=\"end\">{{ $item(\"0\").$node[\"Parse Creator Data\"].json.total }}</text>\n </g>\n <g class=\"row\" style=\"animation-delay:200ms\" transform=\"translate(175,55)\">\n <svg class=\"icon\" viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" y=\"1\"><path fill-rule=\"evenodd\" d=\"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z\"/></svg>\n <text class=\"text\" x=\"22\" y=\"13\">Approved Workflows</text>\n <text class=\"text\" font-weight=\"700\" x=\"295\" y=\"13\" text-anchor=\"end\">{{ $item(\"0\").$node[\"Parse Creator Data\"].json.approved }}</text>\n </g>\n <g class=\"row\" style=\"animation-delay:300ms\" transform=\"translate(175,95)\">\n <svg class=\"icon\" viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" y=\"1\"><path fill-rule=\"evenodd\" d=\"M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z\"/></svg>\n <text class=\"text\" x=\"22\" y=\"13\">Community Username</text>\n <text class=\"text\" font-weight=\"700\" x=\"295\" y=\"13\" text-anchor=\"end\">{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"n8n_creator_username\"] }}</text>\n </g>\n <g class=\"row\" style=\"animation-delay:400ms\" transform=\"translate(175,135)\">\n <svg class=\"icon\" viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" y=\"1\"><path fill-rule=\"evenodd\" d=\"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.092 2.187-2.346 2.637-3.024a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.024C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z\"/></svg>\n <text class=\"text\" x=\"22\" y=\"13\">Profile</text>\n <text class=\"text\" font-weight=\"700\" x=\"295\" y=\"13\" text-anchor=\"end\">n8n.io/creators/{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"n8n_creator_username\"] }}</text>\n </g>\n</g>\n</svg>"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "15572edd-6517-4db4-88ee-0b3e2b343c00",
"name": "GitHub \u2013 Edit Existing File",
"type": "n8n-nodes-base.github",
"onError": "continueErrorOutput",
"position": [
1888,
192
],
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"github_username\"] }}"
},
"filePath": "n8n-stats.svg",
"resource": "file",
"operation": "edit",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"github_repository\"] }}"
},
"fileContent": "={{ $item(\"0\").$node[\"Build SVG Card\"].json[\"svg\"] }}",
"commitMessage": "=chore: update n8n stats badge {{ $now }}"
},
"typeVersion": 1
},
{
"id": "9cf5fcbb-9684-4104-a985-56f524b100fb",
"name": "GitHub \u2013 Create New File",
"type": "n8n-nodes-base.github",
"position": [
1888,
384
],
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"github_username\"] }}"
},
"filePath": "n8n-stats.svg",
"resource": "file",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"github_repository\"] }}"
},
"fileContent": "={{ $item(\"0\").$node[\"Build SVG Card\"].json[\"svg\"] }}",
"commitMessage": "=chore: create n8n stats badge {{ $now }}"
},
"typeVersion": 1
},
{
"id": "215d27a9-b869-4c62-8d5c-5a6ff34fe88d",
"name": "Merge Results",
"type": "n8n-nodes-base.aggregate",
"position": [
2112,
288
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "397cf28b-f098-40a4-87dd-f10d2a1359f2",
"name": "Output Embed URLs",
"type": "n8n-nodes-base.set",
"position": [
2336,
288
],
"parameters": {
"fields": {
"values": [
{
"name": "CDN URL (cached)",
"stringValue": "=https://cdn.statically.io/gh/{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"github_username\"] }}/{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"github_repository\"] }}/main/n8n-stats.svg"
},
{
"name": "Direct GitHub URL",
"stringValue": "=https://raw.githubusercontent.com/{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"github_username\"] }}/{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"github_repository\"] }}/main/n8n-stats.svg"
},
{
"name": "README Markdown Embed",
"stringValue": "=.$node[\"\u2699\ufe0f Config\"].json[\"github_username\"] }}/{{ $item(\"0\").$node[\"\u2699\ufe0f Config\"].json[\"github_repository\"] }}/main/n8n-stats.svg)"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
}
],
"connections": {
"Merge Results": {
"main": [
[
{
"node": "Output Embed URLs",
"type": "main",
"index": 0
}
]
]
},
"\u2699\ufe0f Config": {
"main": [
[
{
"node": "Fetch Creator Profile",
"type": "main",
"index": 0
}
]
]
},
"Build SVG Card": {
"main": [
[
{
"node": "GitHub \u2013 Edit Existing File",
"type": "main",
"index": 0
}
]
]
},
"Download Avatar": {
"main": [
[
{
"node": "Encode Avatar to Base64",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "\u2699\ufe0f Config",
"type": "main",
"index": 0
}
]
]
},
"Parse Creator Data": {
"main": [
[
{
"node": "Download Avatar",
"type": "main",
"index": 0
}
]
]
},
"Fetch Creator Profile": {
"main": [
[
{
"node": "Parse Creator Data",
"type": "main",
"index": 0
}
]
]
},
"Encode Avatar to Base64": {
"main": [
[
{
"node": "Build SVG Card",
"type": "main",
"index": 0
}
]
]
},
"GitHub \u2013 Create New File": {
"main": [
[
{
"node": "Merge Results",
"type": "main",
"index": 0
}
]
]
},
"GitHub \u2013 Edit Existing File": {
"main": [
[
{
"node": "Merge Results",
"type": "main",
"index": 0
}
],
[
{
"node": "GitHub \u2013 Create New File",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Showcase your n8n creator profile with a dynamically generated SVG stats badge, automatically pushed to any GitHub repository on a schedule — ready to embed in your README in seconds.
Source: https://n8n.io/workflows/15643/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
N8N-Workflow-Github-Manager. Uses github, httpRequest, n8n. Scheduled trigger; 38 nodes.
This workflow will gather data every minute from the GitHub (https://github.com), Docker (https://www.docker.com/), npm (https://www.npmjs.com/) and Product Hunt (https://www.producthunt.com/) website
This workflow creates a versioned backup of an entire Clockify workspace split up into monthly reports. This backup routine runs daily by default The Clockify reports API endpoint is used to get all d
This workflow automatically ingests newly-uploaded files, validates and transforms their contents, stores the processed files in a GitHub repository, and sends email notifications upon completion. It
This n8n workflow template is designed to automate the process of updating a creator's profile statistics, including total workflows, complex workflows, approved workflows, pending workflows, total no