{
  "id": "T0ReMcLxo5tdiqE3",
  "name": "Discover Real Market Problems from Reddit Posts with OpenAI",
  "tags": [],
  "nodes": [
    {
      "id": "973a9cd8-ed88-4325-8ea7-368e251238f5",
      "name": "Sticky: Workflow Overview (Yellow)",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -280,
        -40
      ],
      "parameters": {
        "color": "yellow",
        "width": 540,
        "height": 400,
        "content": "## Discover Real Market Problems from Reddit Posts with OpenAI\n\nThis workflow fetches fresh Reddit posts from **Teachers**, **Education**, and **RemoteWork**, filters for relevance, analyzes them with **OpenAI GPT-4.1**, and appends structured insights to **Google Sheets**.\n\n**What it detects:** real problem \u2192 underlying pain \u2192 proposed solution \u2192 impact, confidence, ease \u2192 ICE score.\n\n**Configure before running:**\n- Credentials: Reddit OAuth2, OpenAI API, Google Sheets OAuth2.\n- Google Sheet: set your **Spreadsheet ID** and **Sheet/Tab name** in the Google Sheets node.\n- Optional: Adjust the upvote threshold in the **+5 UPS** filter."
      },
      "typeVersion": 1
    },
    {
      "id": "ab7940ff-bbeb-4b46-8cb3-d5e9b7edc003",
      "name": "Sticky: Variables to Configure (White)",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -280,
        420
      ],
      "parameters": {
        "color": "white",
        "width": 540,
        "height": 300,
        "content": "## Variables & Credentials to Configure\n- **Reddit OAuth2**: connect your Reddit account in all Reddit nodes.\n- **OpenAI API**: set your OpenAI credential in the *Message a model* node.\n- **Google Sheets OAuth2**: connect to your Google account in the Sheets node.\n- **Spreadsheet ID**: replace the current ID in the Sheets node with your own.\n- **Sheet/Tab Name**: set to your target tab (e.g., `Sheet1`).\n- **Upvote threshold**: change `> 5` in the filter node if you want stricter/looser selection.\n- **Subreddits**: replace `Teachers`, `Education`, `remotework` to target other domains."
      },
      "typeVersion": 1
    },
    {
      "id": "b2d729c8-6626-43ab-aca6-30be2c92e7a2",
      "name": "Sticky: Google Sheets Fields (White)",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1740,
        -100
      ],
      "parameters": {
        "color": "white",
        "width": 480,
        "height": 400,
        "content": "## Google Sheets Fields (Schema & Meaning)\n- **SubRedit** *(string)*: Source subreddit name (e.g., `r/Teachers`).\n- **URL** *(string)*: Link to the original Reddit post.\n- **Title** *(string)*: Reddit post title.\n- **Content** *(string)*: Reddit post body (`selftext`).\n- **Short Description** *(string)*: Problem in <200 chars.\n- **Detected Pain** *(string)*: The explicit/implicit pain point.\n- **Possible Solution** *(string)*: Concrete, tech/AI-enabled solution idea.\n- **Impact** *(1\u201310)*: Size of affected population (10 = millions).\n- **Confidence** *(0.0\u20131.0)*: Confidence the problem is real.\n- **Ease** *(1\u201310)*: Ease to prototype/MVP (10 = hours, 5 = ~24h, 1 = weeks).\n- **ICE Score** *(number)*: `Impact * Confidence * Ease` (auto-calculated in the node)."
      },
      "typeVersion": 1
    },
    {
      "id": "35ae34aa-28a9-450c-aa8e-b1f237c4257d",
      "name": "Sticky: Prompts (White)",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1100,
        580
      ],
      "parameters": {
        "color": "white",
        "width": 700,
        "height": 620,
        "content": "## Prompts (English, Neutral)\n**User Prompt**\nAnalyze the following Reddit post to determine if it describes a real problem related to the future of work or education. If it does, identify the underlying pain point, briefly describe the problem, and propose a viable solution, preferably using AI or technology. Also evaluate its impact, your confidence level that it is a real problem, and how easy it would be to prototype a solution. Return ONLY a structured JSON.\n\nPost Title: `{{ $json.title }}`\nPost Content: `{{ $json.selftext }}`\n\n**System Prompt**\nYou are an expert analyst in detecting signals of real market problems, especially those related to the future of work and education. Your task is to analyze Reddit posts as potential symptoms of broader issues that could be solved with innovative, technological, and/or AI-based solutions.\n\nYour goal is: assess relevance (work/education), identify pain, propose feasible tech/AI solution, and score **impact**, **confidence**, and **ease**.\n\nJSON schema:\n```\n{\n  \"is_related\": true | false,\n  \"short_description\": \"<200 chars>\",\n  \"detected_pain\": \"string\",\n  \"possible_solution\": \"string\",\n  \"impact\": 1-10,\n  \"confidence\": 0.0-1.0,\n  \"ease\": 1-10\n}\n```"
      },
      "typeVersion": 1
    },
    {
      "id": "117fc69e-460a-467c-b062-3fd3e84a645a",
      "name": "Get many posts Teachers",
      "type": "n8n-nodes-base.reddit",
      "position": [
        620,
        140
      ],
      "parameters": {
        "limit": 50,
        "filters": {
          "category": "new"
        },
        "operation": "getAll",
        "subreddit": "Teachers"
      },
      "credentials": {
        "redditOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5c09961a-49e7-46dc-95ec-72ea107727b9",
      "name": "Get many posts Education",
      "type": "n8n-nodes-base.reddit",
      "position": [
        620,
        360
      ],
      "parameters": {
        "limit": 50,
        "filters": {
          "category": "new"
        },
        "operation": "getAll",
        "subreddit": "Education"
      },
      "credentials": {
        "redditOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c96e68b4-a51f-4f1b-8e99-c95c65be7ce8",
      "name": "Get many posts RemoteWork",
      "type": "n8n-nodes-base.reddit",
      "position": [
        620,
        540
      ],
      "parameters": {
        "limit": 50,
        "filters": {
          "category": "new"
        },
        "operation": "getAll",
        "subreddit": "remotework"
      },
      "credentials": {
        "redditOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e5b186d7-71b3-4262-9589-164c09cf6b9e",
      "name": "Message a model",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1280,
        360
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "GPT-4.1"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Analyze the following Reddit post to determine if it describes a real problem related to the future of work or education. If it does, identify the underlying pain point, briefly describe the problem, and propose a viable solution, preferably using AI or technology. Also evaluate its impact, your confidence level that it is a real problem, and how easy it would be to prototype a solution. Return ONLY a structured JSON.\n\nPost Title: {{ $json.title }}\nPost Content: {{ $json.selftext }}"
            },
            {
              "role": "system",
              "content": "=You are an expert analyst in detecting signals of real market problems, especially those related to the future of work and education. Your task is to analyze Reddit posts as potential symptoms of broader issues that could be solved with innovative, technological, and/or AI-based solutions.\n\nYour goal is:\n\nAssess whether the content describes a real problem related to the future of education or employment.\n\nUnderstand the underlying pain point or unmet need.\n\nPropose a feasible solution using technological or AI tools, prioritizing actionable solutions with a quick MVP if possible.\n\nEvaluate the potential impact, confidence level regarding the validity of the problem, and the ease of prototyping a solution.\n\nYou must return only a valid JSON in the following format:\n\n{\n  \"is_related\": true | false,\n  \"short_description\": \"Briefly explain in under 200 characters the identified problem\",\n  \"detected_pain\": \"Describe the main pain point or explicit/implicit need in the post\",\n  \"possible_solution\": \"Propose a concrete and detailed solution to the problem, using technology and AI tools if applicable\",\n  \"impact\": 1-10, // How many people could the solution help? (10 = millions, 1 = a few)\n  \"confidence\": 0.0-1.0, // How certain are you that this is a real problem? Use decimal percentages\n  \"ease\": 1-10 // How easy is it to build an MVP or proof of concept? (10 = landing page in hours, 5 = POC in 24h, 1 = takes weeks)\n}"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "c3de3cb6-feb1-4131-96c1-b22854dd23a2",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        400,
        360
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "948c9ca8-2fe0-4798-acfa-81ca063145bd",
      "name": "Merger",
      "type": "n8n-nodes-base.merge",
      "position": [
        860,
        360
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "a54491c6-e71a-493d-9a46-27d36e7e7782",
      "name": "+5 UPS",
      "type": "n8n-nodes-base.filter",
      "position": [
        1060,
        360
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "66a1151e-872b-47dd-9358-4a158d66f5e3",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.ups }}",
              "rightValue": 5
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a31da91e-089b-4372-b259-76f3bec462d1",
      "name": "is_related",
      "type": "n8n-nodes-base.filter",
      "position": [
        1660,
        360
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "86cfccd5-3cd3-483e-818f-9f78c78df5b1",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.message.content.is_related }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "2e9c09f3-0b41-464f-9b83-8b066cca4cc8",
      "name": "Add to Market Pains List",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1920,
        360
      ],
      "parameters": {
        "columns": {
          "value": {
            "URL": "={{ $('Merger').item.json.url }}",
            "Ease": "={{ $json.message.content.ease }}",
            "Title": "={{ $('Merger').item.json.title }}",
            "Impact": "={{ $json.message.content.impact }}",
            "Content": "={{ $('Merger').item.json.selftext }}",
            "SubRedit": "={{ $('Merger').item.json.subreddit_name_prefixed }}",
            "ICE Score": "={{ $json.message.content.impact *$json.message.content.confidence*$json.message.content.ease}}",
            "Confidence": "={{ $json.message.content.confidence }}",
            "Detected Pain": "={{ $json.message.content.detected_pain }}",
            "Possible Solution": "={{ $json.message.content.possible_solution }}",
            "Short Description": "={{ $json.message.content.short_description }}"
          },
          "schema": [
            {
              "id": "SubRedit",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "SubRedit",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Short Description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Short Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Detected Pain",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Detected Pain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Possible Solution",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Possible Solution",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Impact",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Impact",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Confidence",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Confidence",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ease",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Ease",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ICE Score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ICE Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14nxsrM7DidPS936uIXBGAErMVmOZqdEZE25c6yu436E/edit#gid=0",
          "cachedResultName": "Hoja 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "14nxsrM7DidPS936uIXBGAErMVmOZqdEZE25c6yu436E",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14nxsrM7DidPS936uIXBGAErMVmOZqdEZE25c6yu436E/edit?usp=drivesdk",
          "cachedResultName": "Market Oportunities"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "53cc42d4-86e4-4d26-b095-8a2d7d4baeb6",
  "connections": {
    "+5 UPS": {
      "main": [
        [
          {
            "node": "Message a model",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merger": {
      "main": [
        [
          {
            "node": "+5 UPS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "is_related": {
      "main": [
        [
          {
            "node": "Add to Market Pains List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message a model": {
      "main": [
        [
          {
            "node": "is_related",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get many posts Teachers",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get many posts Education",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get many posts RemoteWork",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get many posts Teachers": {
      "main": [
        [
          {
            "node": "Merger",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get many posts Education": {
      "main": [
        [
          {
            "node": "Merger",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get many posts RemoteWork": {
      "main": [
        [
          {
            "node": "Merger",
            "type": "main",
            "index": 2
          }
        ]
      ]
    }
  }
}