{
  "name": "Scrapeless \u2014 local business lead generation",
  "nodes": [
    {
      "parameters": {},
      "id": "b2000000-0000-4000-8000-000000000001",
      "name": "Run manually",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -220,
        0
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "q-1",
              "name": "query",
              "value": "plumbers in Austin, TX",
              "type": "string"
            },
            {
              "id": "q-2",
              "name": "min_reviews",
              "value": 50,
              "type": "number"
            }
          ]
        },
        "options": {}
      },
      "id": "b2000000-0000-4000-8000-000000000002",
      "name": "Search parameters",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.scrapeless.com/api/v1/scraper/request",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-token",
              "value": "={{ $env.SCRAPELESS_API_KEY }}"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ actor: 'scraper.google.search', input: { q: $json.query, tbm: 'lcl' } }) }}",
        "options": {
          "timeout": 180000
        }
      },
      "id": "b2000000-0000-4000-8000-000000000003",
      "name": "Google local pack",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        220,
        0
      ],
      "onError": "continueRegularOutput",
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 3000,
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "jsCode": "// The actor pads several string fields with a leading space, and returns\n// place_id / gps_coordinates / thumbnail empty for local results.\nconst clean = (value) => (typeof value === 'string' ? value.trim() : value);\n\nconst response = $input.first().json;\nconst places = response.local_results?.places ?? [];\nconst minReviews = $('Search parameters').first().json.min_reviews ?? 0;\nconst query = $('Search parameters').first().json.query ?? '';\n\nif (!places.length) {\n  return [{ json: { query, error: 'no local_results.places in response \u2014 query may lack local intent' } }];\n}\n\nreturn places\n  .map((place) => ({\n    query,\n    position: place.position ?? null,\n    name: clean(place.title),\n    category: clean(place.type),\n    rating: place.rating ?? null,\n    reviews: place.reviews ?? 0,\n    price_level: clean(place.price),\n    phone: clean(place.phone),\n    hours: clean(place.hours),\n    address_snippet: clean(place.address),\n    attributes: (place.extensions ?? []).map(clean),\n  }))\n  .filter((lead) => (lead.reviews ?? 0) >= minReviews && lead.phone)\n  .map((json) => ({ json }));"
      },
      "id": "b2000000-0000-4000-8000-000000000004",
      "name": "Qualify leads",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {},
      "id": "b2000000-0000-4000-8000-000000000005",
      "name": "Push to CRM",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        660,
        0
      ]
    }
  ],
  "connections": {
    "Run manually": {
      "main": [
        [
          {
            "node": "Search parameters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search parameters": {
      "main": [
        [
          {
            "node": "Google local pack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google local pack": {
      "main": [
        [
          {
            "node": "Qualify leads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Qualify leads": {
      "main": [
        [
          {
            "node": "Push to CRM",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}