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 →
{
"id": "6",
"name": "Dashboard",
"nodes": [
{
"name": "Cron",
"type": "n8n-nodes-base.cron",
"position": [
-290,
180
],
"parameters": {
"triggerTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"typeVersion": 1
},
{
"name": "Dashboard Configuration",
"type": "n8n-nodes-base.set",
"color": "#FF0000",
"notes": "Update project settings",
"position": [
-10,
180
],
"parameters": {
"values": {
"string": [
{
"name": "dashboardHostname",
"value": "http://192.168.0.14:8080"
},
{
"name": "dashboardAuthToken",
"value": "n8n-rocks!"
},
{
"name": "product_hunt_post_id",
"value": "170391"
},
{
"name": "npm_package",
"value": "n8n"
},
{
"name": "docker_name",
"value": "n8nio"
},
{
"name": "docker_repository",
"value": "n8n"
},
{
"name": "github_owner",
"value": "n8n-io"
},
{
"name": "github_repo",
"value": "n8n"
}
]
},
"options": {}
},
"notesInFlow": true,
"typeVersion": 1
},
{
"name": "Retrieve Docker Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
260,
300
],
"parameters": {
"url": "=https://hub.docker.com/v2/repositories/{{$node[\"Dashboard Configuration\"].json[\"docker_name\"]}}/{{$node[\"Dashboard Configuration\"].json[\"docker_repository\"]}}",
"options": {},
"queryParametersUi": {
"parameter": []
},
"headerParametersUi": {
"parameter": [
{
"name": "User-Agent",
"value": "n8n"
}
]
}
},
"typeVersion": 1
},
{
"name": "Docker Pulls",
"type": "n8n-nodes-base.httpRequest",
"position": [
630,
220
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/docker_pulls",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "current",
"value": "={{$node[\"Massage Docker Data\"].json[\"pull_count\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "Docker Stars",
"type": "n8n-nodes-base.httpRequest",
"position": [
630,
400
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/docker_stars",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "current",
"value": "={{$node[\"Massage Docker Data\"].json[\"star_count\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "Retrieve npm Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
250,
50
],
"parameters": {
"url": "=https://api.npms.io/v2/package/{{$node[\"Dashboard Configuration\"].json[\"npm_package\"]}}",
"options": {},
"headerParametersUi": {
"parameter": [
{
"name": "User-Agent",
"value": "n8n"
}
]
}
},
"typeVersion": 1
},
{
"name": "GitHub Watchers",
"type": "n8n-nodes-base.httpRequest",
"position": [
820,
640
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/github_watchers",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "current",
"value": "={{$node[\"Massage GitHub Data\"].json[\"subscribers_count\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "GitHub Forks",
"type": "n8n-nodes-base.httpRequest",
"position": [
820,
800
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/github_forks",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "current",
"value": "={{$node[\"Massage GitHub Data\"].json[\"forks_count\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "GitHub Open Issues ",
"type": "n8n-nodes-base.httpRequest",
"position": [
620,
860
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/github_open_issues",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "current",
"value": "={{$node[\"Massage GitHub Data\"].json[\"open_issues_count\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "GitHub Stars",
"type": "n8n-nodes-base.httpRequest",
"position": [
620,
560
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/github_stars",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "current",
"value": "={{$node[\"Massage GitHub Data\"].json[\"stargazers_count\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "npm Maintenance",
"type": "n8n-nodes-base.httpRequest",
"position": [
830,
-90
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/npm_maintenance",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "value",
"value": "={{$node[\"Massage npm Data\"].json[\"score\"][\"detail\"][\"maintenance\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "npm Popularity",
"type": "n8n-nodes-base.httpRequest",
"position": [
1030,
0
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/npm_popularity",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "value",
"value": "={{$node[\"Massage npm Data\"].json[\"score\"][\"detail\"][\"popularity\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "npm Quality",
"type": "n8n-nodes-base.httpRequest",
"position": [
1030,
150
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/npm_quality",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "value",
"value": "={{$node[\"Massage npm Data\"].json[\"score\"][\"detail\"][\"quality\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "npm Final",
"type": "n8n-nodes-base.httpRequest",
"position": [
830,
190
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/npm_final",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "value",
"value": "={{$node[\"Massage npm Data\"].json[\"score\"][\"final\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "Product Hunt Rating",
"type": "n8n-nodes-base.httpRequest",
"position": [
630,
-510
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/prod_hunt_rating",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "value",
"value": "={{$node[\"Retrieve Product Hunt Data\"].json[\"data\"][\"post\"][\"reviewsRating\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "Product Hunt Reviews",
"type": "n8n-nodes-base.httpRequest",
"position": [
830,
-410
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/prod_hunt_reviews",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "current",
"value": "={{$node[\"Massage Product Hunt Data\"].json[\"data\"][\"post\"][\"reviewsCount\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "Product Hunt Votes",
"type": "n8n-nodes-base.httpRequest",
"position": [
830,
-260
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/prod_hunt_votes",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "current",
"value": "={{$node[\"Massage Product Hunt Data\"].json[\"data\"][\"post\"][\"votesCount\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "Product Hunt Comments",
"type": "n8n-nodes-base.httpRequest",
"position": [
630,
-210
],
"parameters": {
"url": "={{$node[\"Dashboard Configuration\"].json[\"dashboardHostname\"]}}/widgets/prod_hunt_comments",
"options": {},
"requestMethod": "POST",
"bodyParametersUi": {
"parameter": [
{
"name": "auth_token",
"value": "={{$node[\"Dashboard Configuration\"].json[\"dashboardAuthToken\"]}}"
},
{
"name": "current",
"value": "={{$node[\"Massage Product Hunt Data\"].json[\"data\"][\"post\"][\"commentsCount\"]}}"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "GitHub",
"type": "n8n-nodes-base.github",
"color": "#FF0000",
"position": [
250,
710
],
"parameters": {
"owner": "={{$node[\"Dashboard Configuration\"].json[\"github_owner\"]}}",
"resource": "repository",
"operation": "get",
"repository": "={{$node[\"Dashboard Configuration\"].json[\"github_repo\"]}}"
},
"credentials": {
"githubApi": "<your credential>"
},
"typeVersion": 1
},
{
"name": "Retrieve Product Hunt Data",
"type": "n8n-nodes-base.httpRequest",
"color": "#FF0000",
"notes": "Update authorization token",
"position": [
250,
-360
],
"parameters": {
"url": "https://api.producthunt.com/v2/api/graphql",
"options": {},
"requestMethod": "POST",
"queryParametersUi": {
"parameter": [
{
"name": "query",
"value": "={\n post(id: {{$node[\"Dashboard Configuration\"].json[\"product_hunt_post_id\"]}}) {\n commentsCount\n votesCount\n reviewsCount\n reviewsRating\n name\n }\n}"
}
]
},
"headerParametersUi": {
"parameter": [
{
"name": "User-Agent",
"value": "n8n"
},
{
"name": "authorization",
"value": "Bearer <Enter Product Hunt token here>"
}
]
}
},
"notesInFlow": true,
"typeVersion": 1
},
{
"name": "Massage npm Data",
"type": "n8n-nodes-base.function",
"position": [
440,
50
],
"parameters": {
"functionCode": "items[0].json.score.detail.maintenance = parseFloat(items[0].json.score.detail.maintenance.toFixed(2));\nitems[0].json.score.detail.popularity= parseFloat(items[0].json.score.detail.popularity.toFixed(2));\nitems[0].json.score.detail.quality= parseFloat(items[0].json.score.detail.quality.toFixed(2));\nitems[0].json.score.final= parseFloat(items[0].json.score.final.toFixed(2));\n\nreturn items;"
},
"typeVersion": 1
},
{
"name": "Massage Product Hunt Data",
"type": "n8n-nodes-base.function",
"position": [
440,
-360
],
"parameters": {
"functionCode": "items[0].json.data.post.commentsCount = items[0].json.data.post.commentsCount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.data.post.votesCount= items[0].json.data.post.votesCount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.data.post.reviewsCount= items[0].json.data.post.reviewsCount.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\nreturn items;\n"
},
"typeVersion": 1
},
{
"name": "Massage Docker Data",
"type": "n8n-nodes-base.function",
"position": [
460,
300
],
"parameters": {
"functionCode": "items[0].json.star_count = items[0].json.star_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.pull_count = items[0].json.pull_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\nreturn items;\n"
},
"typeVersion": 1
},
{
"name": "Massage GitHub Data",
"type": "n8n-nodes-base.function",
"position": [
450,
710
],
"parameters": {
"functionCode": "items[0].json.stargazers_count = items[0].json.stargazers_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.subscribers_count = items[0].json.subscribers_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.forks_count = items[0].json.forks_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\nitems[0].json.open_issues_count = items[0].json.open_issues_count.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\nreturn items;"
},
"typeVersion": 1
}
],
"active": true,
"settings": {},
"connections": {
"Cron": {
"main": [
[
{
"node": "Dashboard Configuration",
"type": "main",
"index": 0
}
]
]
},
"GitHub": {
"main": [
[
{
"node": "Massage GitHub Data",
"type": "main",
"index": 0
}
]
]
},
"Massage npm Data": {
"main": [
[
{
"node": "npm Maintenance",
"type": "main",
"index": 0
},
{
"node": "npm Quality",
"type": "main",
"index": 0
},
{
"node": "npm Popularity",
"type": "main",
"index": 0
},
{
"node": "npm Final",
"type": "main",
"index": 0
}
]
]
},
"Retrieve npm Data": {
"main": [
[
{
"node": "Massage npm Data",
"type": "main",
"index": 0
}
]
]
},
"Massage Docker Data": {
"main": [
[
{
"node": "Docker Stars",
"type": "main",
"index": 0
},
{
"node": "Docker Pulls",
"type": "main",
"index": 0
}
]
]
},
"Massage GitHub Data": {
"main": [
[
{
"node": "GitHub Stars",
"type": "main",
"index": 0
},
{
"node": "GitHub Watchers",
"type": "main",
"index": 0
},
{
"node": "GitHub Forks",
"type": "main",
"index": 0
},
{
"node": "GitHub Open Issues ",
"type": "main",
"index": 0
}
]
]
},
"Retrieve Docker Data": {
"main": [
[
{
"node": "Massage Docker Data",
"type": "main",
"index": 0
}
]
]
},
"Dashboard Configuration": {
"main": [
[
{
"node": "Retrieve Product Hunt Data",
"type": "main",
"index": 0
},
{
"node": "Retrieve npm Data",
"type": "main",
"index": 0
},
{
"node": "Retrieve Docker Data",
"type": "main",
"index": 0
},
{
"node": "GitHub",
"type": "main",
"index": 0
}
]
]
},
"Massage Product Hunt Data": {
"main": [
[
{
"node": "Product Hunt Rating",
"type": "main",
"index": 0
},
{
"node": "Product Hunt Reviews",
"type": "main",
"index": 0
},
{
"node": "Product Hunt Votes",
"type": "main",
"index": 0
},
{
"node": "Product Hunt Comments",
"type": "main",
"index": 0
}
]
]
},
"Retrieve Product Hunt Data": {
"main": [
[
{
"node": "Massage Product Hunt Data",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
githubApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow delivers a comprehensive dashboard that aggregates key metrics from your Docker and GitHub repositories, providing real-time insights into pulls, stars, watchers, and forks to help you track project performance effortlessly. It's ideal for developers, open-source maintainers, or teams managing multiple repositories who need a centralised view without manual checks. The key step involves the scheduled cron trigger initiating a chain of HTTP requests to fetch data from Docker and GitHub APIs, compiling it into an actionable summary.
Use this workflow for daily or periodic monitoring of repository engagement, especially when integrating metrics into reports or alerts. Avoid it for real-time updates, as the cron schedule suits batch processing rather than instant notifications; opt for webhook triggers instead in those cases. Common variations include adding email nodes to distribute the dashboard or incorporating data from other platforms like npm for broader analytics.
About this workflow
Dashboard. Uses httpRequest, github. Scheduled trigger; 24 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
Display Project Data On A Smashing Dashboard. Uses httpRequest, github. Scheduled trigger; 24 nodes.
Backup Workflows To Github. Uses github, httpRequest. Scheduled trigger; 11 nodes.
Code Github. Uses manualTrigger, stickyNote, n8n, httpRequest. Event-driven trigger; 25 nodes.
Who is this for? This template is ideal for n8n administrators, automation engineers, and DevOps teams who want to maintain bidirectional synchronization between their n8n workflows and GitHub reposit
Code Github. Uses manualTrigger, stickyNote, httpRequest, noOp. Event-driven trigger; 24 nodes.