This workflow corresponds to n8n.io template #7394 — we link there as the canonical source.
This workflow follows the Agent → OpenAI Chat 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": "4WG3MooFcMpSGdlq",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "GitHub Trending to Supabase (Daily, Weekly, Monthly)",
"tags": [],
"nodes": [
{
"id": "b758abe6-6889-4723-91bb-3140b3b4c5fb",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
96,
512
],
"parameters": {
"text": "=This is a Markdown text containing multiple projects:\n---\n{{ $json.data.markdown }}\nPlease extract all project information and insert it into Supabase.\nWhen storing the data, make sure to include the field \"type\" with the value from:\n{{ $('B_ALL').item.json.type }}\n,\nwhich will be one of: \"daily\", \"weekly\", or \"monthly\".\nnow, please extract all projects out and save to supabase.",
"options": {
"systemMessage": "You are a professional data extraction assistant.\nYour task is to extract all key information from the provided Markdown text, which contains multiple GitHub Trending projects.\n\nPlease follow these rules strictly:\n\t1.\tIdentify all projects:\nLocate each individual project in the text. Projects are typically separated by a horizontal divider ---.\n\t2.\tFor each project, extract the following fields:\n\t\u2022\tname: The project name in the format \"username/repository\".\n\t\u2022\turl: The GitHub URL of the project.\n\t\u2022\tdescription: The project description.\n\t\u2022\tlanguage: The main programming language of the project. If not provided, use an empty string \"\".\n\t\u2022\tstars: The total number of stars. This must be a number, and all thousand separators (such as commas) must be removed. If not provided, set to 0.\n\t3.\tOutput format:\nYour output must be a JSON array only. Each element in the array must be a JSON object representing a single project.\n\t4.\tNo extra content:\nDo not include any extra text, explanations, or Markdown syntax (e.g., ```json) before or after the JSON array.\n\nExample output format:\n[\n{\n\u201cname\u201d: \u201cuser1/repo1\u201d,\n\u201curl\u201d: \u201chttps://github.com/user1/repo1\u201d,\n\u201cdescription\u201d: \u201cThis is the first project.\u201d,\n\u201clanguage\u201d: \u201cTypeScript\u201d,\n\u201cstars\u201d: 12000\n},\n{\n\u201cname\u201d: \u201cuser2/repo2\u201d,\n\u201curl\u201d: \u201chttps://github.com/user2/repo2\u201d,\n\u201cdescription\u201d: \u201cThis is the second project.\u201d,\n\u201clanguage\u201d: \u201cPython\u201d,\n\u201cstars\u201d: 5432\n}\n]\n"
},
"promptType": "define"
},
"executeOnce": false,
"notesInFlow": false,
"typeVersion": 2.2,
"alwaysOutputData": false
},
{
"id": "37cb081c-e9d4-43b9-930e-345652284f64",
"name": "Create a row in Supabase",
"type": "n8n-nodes-base.supabaseTool",
"position": [
232,
736
],
"parameters": {
"tableId": "githubtrending",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "url",
"fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues0_Field_Value', `github project url`, 'string') }}"
},
{
"fieldId": "project_id",
"fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues1_Field_Value', `github project id name like: ubicloud / ubicloud`, 'string') }}"
},
{
"fieldId": "project_desc",
"fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues2_Field_Value', `github project description`, 'string') }}"
},
{
"fieldId": "code_language",
"fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues3_Field_Value', `project main code language`, 'string') }}"
},
{
"fieldId": "stars",
"fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues4_Field_Value', `github stars`, 'string') }}"
},
{
"fieldId": "type",
"fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fieldValues5_Field_Value', `it should be one of daily, weekly, monthly`, 'string') }}"
}
]
}
},
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "57f0b1a1-1939-4f2a-8261-68f56a918462",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
104,
736
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "0de487de-b268-43c3-83ef-96b5bb931988",
"name": "daily",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-800,
320
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "40691357-cc3a-4394-a7f7-532f40b351d9",
"name": "weekly",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-800,
512
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "7e66eea9-6840-4620-8fd4-81cd34be19c4",
"name": "monthly",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-800,
704
],
"parameters": {
"rule": {
"interval": [
{
"field": "months"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "0145707f-6da7-4771-bf26-9226ee11d668",
"name": "firecrawl",
"type": "@mendable/n8n-nodes-firecrawl.firecrawl",
"position": [
-128,
440
],
"parameters": {
"url": "=https://github.com/trending?since={{ $json.type }}",
"operation": "scrape",
"useCustomBody": true,
"requestOptions": {},
"additionalFields": {
"customProperties": "{\"onlyMainContent\":true,\"excludeTags\":[\".Box .Box-header\"],\"includeTags\":[\"div[data-hpc]\"]}"
}
},
"credentials": {
"firecrawlApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "b8c5d470-e2a4-41ca-be24-e42790c3b5f3",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
464,
416
],
"parameters": {
"width": 672,
"height": 400,
"content": "# Run below sql to create table in supabase: \n```sql\nCREATE TABLE public.githubtrending (\n id bigint GENERATED ALWAYS AS IDENTITY NOT NULL,\n created_at timestamp with time zone NOT NULL DEFAULT now(),\n data_date date DEFAULT now(),\n url text,\n project_id text,\n project_desc text,\n code_language text,\n stars bigint DEFAULT '0'::bigint,\n type text,\n CONSTRAINT githubtrending_pkey PRIMARY KEY (id)\n);\n```"
},
"typeVersion": 1
},
{
"id": "733f7a6a-c56e-46ed-96cf-cc368859c954",
"name": "B1",
"type": "n8n-nodes-base.set",
"position": [
-576,
320
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "64eaadea-d7f3-4702-859e-1ef5172272ae",
"name": "type",
"type": "string",
"value": "daily"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "69dc9a35-d23f-4858-ade6-625a15b4b189",
"name": "B2",
"type": "n8n-nodes-base.set",
"position": [
-576,
512
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "d5d776f5-466b-4bca-a2d3-49eaa52322b1",
"name": "type",
"type": "string",
"value": "weekly"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "bca85759-c41d-43c7-9eb8-11e02ddba632",
"name": "B3",
"type": "n8n-nodes-base.set",
"position": [
-576,
704
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9f2e7822-ca0f-4fec-b68e-a803647ee115",
"name": "type",
"type": "string",
"value": "monthly"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ac379357-4ae9-4617-9fd5-9c5d36c1a4b5",
"name": "B_ALL",
"type": "n8n-nodes-base.set",
"position": [
-352,
512
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8fd79ceb-392b-4265-9b54-c2fef43be6fa",
"name": "type",
"type": "string",
"value": "={{ $json.type }}"
}
]
}
},
"typeVersion": 3.4
}
],
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "09ca306d-3fa0-46b2-804c-f02026ec2613",
"connections": {
"B1": {
"main": [
[
{
"node": "B_ALL",
"type": "main",
"index": 0
}
]
]
},
"B2": {
"main": [
[
{
"node": "B_ALL",
"type": "main",
"index": 0
}
]
]
},
"B3": {
"main": [
[
{
"node": "B_ALL",
"type": "main",
"index": 0
}
]
]
},
"B_ALL": {
"main": [
[
{
"node": "firecrawl",
"type": "main",
"index": 0
},
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"daily": {
"main": [
[
{
"node": "B1",
"type": "main",
"index": 0
}
]
]
},
"weekly": {
"main": [
[
{
"node": "B2",
"type": "main",
"index": 0
}
]
]
},
"monthly": {
"main": [
[
{
"node": "B3",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[]
]
},
"firecrawl": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Create a row in Supabase": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"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.
firecrawlApiopenAiApisupabaseApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is for developers, researchers, founders, and data analysts who want a historical dataset of GitHub Trending repositories without manual scraping. It’s ideal for building dashboards, newsletters, or trend analytics on top of a clean Supabase table.
Source: https://n8n.io/workflows/7394/ — 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.
A weekly agent that finds local businesses with weak or missing web presence, and scores them as sales leads for web agencies, freelance developers, and digital consultants.
Imagine walking into every discovery call fully prepared with company background, recent news, and perfectly tailored questions, without spending a single minute prepping.
This n8n workflow automates the generation and delivery of a daily order summary via email. It leverages an AI Agent to fetch and summarize e-commerce order data from the last 24 hours stored in Supab
System Architecture Two integrated N8N workflows providing automated US stock portfolio management through Telegram:
kisisel asistan. Uses toolWorkflow, toolHttpRequest, toolCalculator, toolThink. Scheduled trigger; 43 nodes.