{
  "name": "Score Upwork jobs and generate proposals with Apify, GPT-4o, Google Sheets and Telegram",
  "nodes": [
    {
      "id": "5a376579-20a2-4731-8e93-25a9d05c852b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        384
      ],
      "parameters": {
        "width": 450,
        "height": 744,
        "content": "## Upwork Job Scraper with AI Scoring\n\nThis workflow automates the process of manual lead sourcing on Upwork. Instead of constantly refreshing the feed, this system identifies high-potential jobs, sco"
      }
    },
    {
      "id": "f8406a75-544a-4f23-bd77-1c04f795df1e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        384
      ],
      "parameters": {
        "width": 550,
        "height": 302,
        "content": "## Scrape Jobs\nSchedule trigger kicks off Apify to fetch latest Upwork listings.\nBudget ranges (hourly: $25-150, fixed: $200-50k) are customizable."
      }
    },
    {
      "id": "e2beaa02-d05e-459b-9aed-3164b9087b6b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        384
      ],
      "parameters": {
        "width": 450,
        "height": 302,
        "content": "## Deduplicate\nCross-references Google Sheet to skip already-processed jobs"
      }
    },
    {
      "id": "321958ec-fe0f-4211-b9ae-ecadfef62c8c",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1600,
        384
      ],
      "parameters": {
        "width": 850,
        "height": 420,
        "content": "## Perform AI Scoring\nGPT-4 evaluates fit, client quality, and budget. Filters jobs scoring 60+."
      }
    },
    {
      "id": "492b9319-aa17-44d3-84f3-da4bddc0bcb7",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2496,
        384
      ],
      "parameters": {
        "width": 886,
        "height": 420,
        "content": "## Generate Proposals\nDrafts a custom proposal based on job description. Review the prompt before first use."
      }
    },
    {
      "id": "56ef68e3-eabd-4db9-882a-6c9d177e91e3",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3424,
        384
      ],
      "parameters": {
        "width": 430,
        "height": 246,
        "content": "## Log & Notify\nSaves results to Google Sheet and sends Telegram summary"
      }
    },
    {
      "id": "e15d6673-338f-4948-9ae0-f35deb7db331",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2736,
        928
      ],
      "parameters": {
        "width": 474,
        "height": 270,
        "content": "## Handle Errors\nCatches failures, logs errors, and sends alert to prevent missed opportunities"
      }
    },
    {
      "id": "e657cd7b-ecce-4cae-90ed-3ab55f29f259",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        544,
        496
      ]
    },
    {
      "id": "ea4f25c8-46cb-47ac-a0ec-1c9828d28c6c",
      "name": "Run Apify Scraper",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        720,
        496
      ]
    },
    {
      "id": "836540af-d357-49b6-81b9-bd5158720b25",
      "name": "Get Dataset Items",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        912,
        496
      ]
    },
    {
      "id": "f584de90-f5cd-4f26-a8fb-db4fa6129fe0",
      "name": "Read Existing Job IDs",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1184,
        496
      ]
    },
    {
      "id": "12145b15-ef30-43a5-90a7-dc6a2e76be36",
      "name": "Filter Duplicates",
      "type": "n8n-nodes-base.code",
      "position": [
        1392,
        496
      ]
    },
    {
      "id": "87ee7eae-d29c-449f-8ae8-473b8ffa9311",
      "name": "Has New Jobs?",
      "type": "n8n-nodes-base.if",
      "position": [
        1632,
        496
      ]
    },
    {
      "id": "0d4df8d1-6d64-436d-9032-95e29a082b84",
      "name": "Normalize Fields",
      "type": "n8n-nodes-base.code",
      "position": [
        1824,
        480
      ]
    },
    {
      "id": "5d25151e-eb98-48fd-8fc0-7bd666519ae9",
      "name": "AI Scoring",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2000,
        480
      ]
    },
    {
      "id": "86a815ec-d204-446a-8f6c-79819f33e240",
      "name": "Parse AI Score",
      "type": "n8n-nodes-base.code",
      "position": [
        2304,
        480
      ]
    },
    {
      "id": "4539cc9c-eb73-42e3-af9a-d0d6228705d9",
      "name": "Filter Score >= 60",
      "type": "n8n-nodes-base.filter",
      "position": [
        2560,
        480
      ]
    },
    {
      "id": "82d96646-645f-4998-ac00-4f6075b3eb09",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2752,
        480
      ]
    },
    {
      "id": "4efa4a9c-40e5-404f-8378-84bdf63771d8",
      "name": "Generate Proposal",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2928,
        608
      ]
    },
    {
      "id": "502f6c69-f0b4-4f9b-84a4-f27adbb7bd19",
      "name": "Log to Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3216,
        608
      ]
    },
    {
      "id": "9b5cfd82-2180-4fef-bfec-0555f316478d",
      "name": "Loop Complete",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2944,
        464
      ]
    },
    {
      "id": "04083b94-e4ed-4a60-89ff-ec9a932c5011",
      "name": "Compute Metrics",
      "type": "n8n-nodes-base.code",
      "position": [
        3472,
        464
      ]
    },
    {
      "id": "11f2ef02-457d-49e3-b7b5-deaf38a19ced",
      "name": "Send Summary",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3648,
        464
      ]
    },
    {
      "id": "c79556bb-509d-4ae3-a49a-c0fc4a977f43",
      "name": "No New Jobs",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1824,
        656
      ]
    },
    {
      "id": "9b0e8b7f-b466-472b-9adf-9b6a9efb7ba8",
      "name": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        2784,
        1024
      ]
    },
    {
      "id": "f70c6e2f-e1a7-4051-b766-c91df40b05e0",
      "name": "Send Error Alert",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2992,
        1024
      ]
    }
  ],
  "connections": {
    "AI Scoring": {
      "main": [
        [
          {
            "node": "Parse AI Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Send Error Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has New Jobs?": {
      "main": [
        [
          {
            "node": "Normalize Fields",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No New Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Complete": {
      "main": [
        [
          {
            "node": "Compute Metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Score": {
      "main": [
        [
          {
            "node": "Filter Score >= 60",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compute Metrics": {
      "main": [
        [
          {
            "node": "Send Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Loop Complete",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Generate Proposal",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Fields": {
      "main": [
        [
          {
            "node": "AI Scoring",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Run Apify Scraper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Duplicates": {
      "main": [
        [
          {
            "node": "Has New Jobs?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Proposal": {
      "main": [
        [
          {
            "node": "Log to Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Dataset Items": {
      "main": [
        [
          {
            "node": "Read Existing Job IDs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run Apify Scraper": {
      "main": [
        [
          {
            "node": "Get Dataset Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Score >= 60": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log to Google Sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Existing Job IDs": {
      "main": [
        [
          {
            "node": "Filter Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}