{
  "name": "Lead scraper & cold email drafter",
  "nodes": [
    {
      "parameters": {
        "jsCode": "// Create search combinations\nconst data = $input.first().json;\nconst location = data['Location (City)'];\n\n// Parse keywords from OpenAI response\nlet keywords = [];\nconst response = data.message?.content || data.text || '';\ntry {\n  const cleanText = response.replace(/```json\\n?|```/g, '').trim();\n  keywords = JSON.parse(cleanText);\n} catch (e) {\n  const match = response.match(/\\[.*\\]/);\n  if (match) keywords = JSON.parse(match[0]);\n}\n\n// Create area variations\nconst areas = [\n  location + ' center',\n  location + ' downtown',\n  location + ' north',\n  location + ' south',\n  location + ' east',\n  location + ' west'\n];\n\n// Generate combinations\nconst searches = [];\nfor (const area of areas) {\n  for (const keyword of keywords) {\n    searches.push({\n      query: `${keyword} in ${area}`,\n      keyword: keyword,\n      area: area,\n      location: location,\n      profession: data['Business Type/Profession'],\n      emailLanguage: data['Email Language'],\n      industryFocus: data['Industry Focus (Optional)'] || ''\n    });\n  }\n}\n\nreturn searches.map(s => ({json: s}));"
      },
      "id": "256d088b-b42d-4289-a6f4-bc67fc77f542",
      "name": "Create Search Matrix",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -896,
        96
      ]
    },
    {
      "parameters": {
        "url": "https://maps.googleapis.com/maps/api/place/textsearch/json",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "query",
              "value": "={{ $json.query }}"
            },
            {
              "name": "key",
              "value": "YOUR_GOOGLE_MAPS_API_KEY"
            }
          ]
        },
        "options": {
          "batching": {
            "batch": {
              "batchSize": 1
            }
          }
        }
      },
      "id": "57d63a90-c900-4f0b-9e3a-b0f04f52bc4c",
      "name": "Google Places Search",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -672,
        96
      ]
    },
    {
      "parameters": {
        "fieldToSplitOut": "results",
        "include": "selectedOtherFields",
        "fieldsToInclude": "keyword,area,location,profession,emailLanguage,industryFocus",
        "options": {}
      },
      "id": "e0b2b733-e783-45af-a8ee-a6e45b148455",
      "name": "Split Results",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        -448,
        96
      ]
    },
    {
      "parameters": {
        "conditions": {
          "conditions": [
            {
              "leftValue": "={{ $json.website }}",
              "rightValue": "",
              "operation": {
                "type": "string",
                "operation": "exists"
              }
            }
          ]
        },
        "options": {}
      },
      "id": "ed96c531-e0b8-4cd0-a408-2907c911b2f8",
      "name": "Has Website?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -224,
        96
      ]
    },
    {
      "parameters": {
        "url": "={{ $json.website }}",
        "options": {
          "allowUnauthorizedCerts": true,
          "response": {
            "response": {
              "responseFormat": "text"
            }
          },
          "timeout": 10000
        }
      },
      "id": "ca5de790-2601-4ea2-89c6-e4ed9060aebe",
      "name": "Fetch Website",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        0,
        0
      ],
      "continueOnFail": true
    },
    {
      "parameters": {
        "resource": "chat",
        "options": {
          "maxTokens": 200,
          "temperature": 0.1
        },
        "requestOptions": {}
      },
      "id": "02d40b91-42c6-45c7-ab30-1e4a90fb7b0e",
      "name": "Analyze Website",
      "type": "n8n-nodes-base.openAi",
      "typeVersion": 1.1,
      "position": [
        224,
        0
      ],
      "credentials": {
        "openAiApi": {
          "name": "OpenAi account"
        }
      },
      "continueOnFail": true
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "website_analysis",
              "name": "website_analysis",
              "type": "object",
              "value": "={\"contact_email\": null, \"website_quality_score\": 0, \"has_ssl\": false}"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "id": "c1a39f8a-e58c-4e44-b1bd-28c91f042971",
      "name": "No Website Data",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        224,
        192
      ]
    },
    {
      "parameters": {
        "jsCode": "// Lead scoring algorithm\nconst business = $input.first().json;\nconst analysis = business.website_analysis || {};\n\nlet score = 0;\n\n// Google reputation (40 points)\nconst rating = business.rating || 0;\nconst reviews = business.user_ratings_total || 0;\nif (rating >= 4.5) score += 30;\nelse if (rating >= 4) score += 20;\nelse if (rating >= 3.5) score += 10;\nif (reviews >= 50) score += 10;\nelse if (reviews >= 10) score += 5;\n\n// Website opportunity (60 points - inverse scoring)\nif (!business.website) {\n  score += 60; // No website = max opportunity\n} else {\n  const quality = analysis.website_quality_score || 0;\n  if (quality < 30) score += 40;\n  else if (quality < 60) score += 20;\n  else score += 5;\n}\n\n// Category\nlet category = 'Cold';\nif (score >= 70) category = 'Hot';\nelse if (score >= 50) category = 'Warm';\n\nreturn [{\n  json: {\n    ...business,\n    lead_score: score,\n    lead_category: category,\n    website_analysis: analysis\n  }\n}];"
      },
      "id": "e558b48d-1483-44a5-93de-37d66a0303a4",
      "name": "Score Lead",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        448,
        96
      ]
    },
    {
      "parameters": {
        "resource": "chat",
        "options": {
          "maxTokens": 400,
          "temperature": 0.7
        },
        "requestOptions": {}
      },
      "id": "89d53bf8-7b9f-4691-88da-09b08cb3e601",
      "name": "Generate Email",
      "type": "n8n-nodes-base.openAi",
      "typeVersion": 1.1,
      "position": [
        672,
        96
      ],
      "credentials": {
        "openAiApi": {
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -1120,
        96
      ],
      "id": "d5fc0181-29fc-47f6-8a0c-d55f08d6c962",
      "name": "When clicking ‘Execute workflow’"
    }
  ],
  "connections": {
    "Create Search Matrix": {
      "main": [
        [
          {
            "node": "Google Places Search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Places Search": {
      "main": [
        [
          {
            "node": "Split Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Results": {
      "main": [
        [
          {
            "node": "Has Website?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has Website?": {
      "main": [
        [
          {
            "node": "Fetch Website",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Website Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Website": {
      "main": [
        [
          {
            "node": "Analyze Website",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Website": {
      "main": [
        [
          {
            "node": "Score Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Website Data": {
      "main": [
        [
          {
            "node": "Score Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Score Lead": {
      "main": [
        [
          {
            "node": "Generate Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Create Search Matrix",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "active": false
}