AutomationFlowsWeb Scraping › Florida Hazards to OpenWebUI KB Workflow

Florida Hazards to OpenWebUI KB Workflow

Original n8n title: Fl Hazards -> Openwebui Kb (hazards) - Fixed

FL Hazards -> OpenWebUI KB (hazards) - FIXED. Uses itemLists, httpRequest. Event-driven trigger; 11 nodes.

Event trigger★★★★☆ complexity11 nodesItem ListsHTTP Request
Web Scraping Trigger: Event Nodes: 11 Complexity: ★★★★☆ Added:

This workflow follows the HTTP Request → Itemlists 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 →

Download .json
{
  "name": "FL Hazards -> OpenWebUI KB (hazards) - FIXED",
  "description": "Collects FL hazard data and injects into OpenWebUI knowledge base using correct API endpoints",
  "nodes": [
    {
      "id": "1",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        250,
        200
      ],
      "parameters": {}
    },
    {
      "id": "1b",
      "name": "Set Input Params",
      "type": "n8n-nodes-base.set",
      "position": [
        350,
        200
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "kb_id",
              "value": "={{$env['OPENWEBUI_KB_HAZARDS_ID'] || 'fl-hazards'}}"
            },
            {
              "name": "openwebui_url",
              "value": "={{$env['OPENWEBUI_API_URL'] || 'https://openwebui.local'}}"
            },
            {
              "name": "openwebui_token",
              "value": "={{$env['OPENWEBUI_API_TOKEN']}}"
            }
          ]
        },
        "options": {}
      }
    },
    {
      "id": "2",
      "name": "Florida Counties List",
      "type": "n8n-nodes-base.set",
      "position": [
        450,
        200
      ],
      "parameters": {
        "values": {
          "json": {
            "counties": [
              {
                "name": "Alachua",
                "lat": 29.65,
                "lon": -82.33
              },
              {
                "name": "Baker",
                "lat": 30.37,
                "lon": -82.23
              },
              {
                "name": "Bradford",
                "lat": 29.98,
                "lon": -82.15
              },
              {
                "name": "Brevard",
                "lat": 28.23,
                "lon": -80.73
              },
              {
                "name": "Broward",
                "lat": 26.16,
                "lon": -80.35
              },
              {
                "name": "Calhoun",
                "lat": 29.95,
                "lon": -84.61
              },
              {
                "name": "Charlotte",
                "lat": 26.98,
                "lon": -81.98
              },
              {
                "name": "Citrus",
                "lat": 28.98,
                "lon": -82.4
              },
              {
                "name": "Clay",
                "lat": 30.23,
                "lon": -81.63
              },
              {
                "name": "Collier",
                "lat": 26.34,
                "lon": -81.76
              },
              {
                "name": "Columbia",
                "lat": 30.25,
                "lon": -82.62
              },
              {
                "name": "DeSoto",
                "lat": 27.02,
                "lon": -81.77
              },
              {
                "name": "Dixie",
                "lat": 29.45,
                "lon": -82.98
              },
              {
                "name": "Duval",
                "lat": 30.34,
                "lon": -81.66
              },
              {
                "name": "Escambia",
                "lat": 30.54,
                "lon": -87.27
              },
              {
                "name": "Flagler",
                "lat": 29.47,
                "lon": -81.24
              },
              {
                "name": "Franklin",
                "lat": 29.83,
                "lon": -84.88
              },
              {
                "name": "Gadsden",
                "lat": 30.5,
                "lon": -84.28
              },
              {
                "name": "Gilchrist",
                "lat": 29.83,
                "lon": -82.88
              },
              {
                "name": "Glades",
                "lat": 27.0,
                "lon": -80.95
              },
              {
                "name": "Gulf",
                "lat": 29.57,
                "lon": -85.12
              },
              {
                "name": "Hamilton",
                "lat": 30.11,
                "lon": -82.97
              },
              {
                "name": "Hardee",
                "lat": 27.72,
                "lon": -81.66
              },
              {
                "name": "Hendry",
                "lat": 26.6,
                "lon": -80.98
              },
              {
                "name": "Hernando",
                "lat": 28.61,
                "lon": -82.35
              },
              {
                "name": "Highlands",
                "lat": 27.28,
                "lon": -81.2
              },
              {
                "name": "Hillsborough",
                "lat": 27.99,
                "lon": -82.27
              },
              {
                "name": "Holmes",
                "lat": 30.75,
                "lon": -85.5
              },
              {
                "name": "Indian River",
                "lat": 27.81,
                "lon": -80.57
              },
              {
                "name": "Jackson",
                "lat": 30.78,
                "lon": -85.3
              },
              {
                "name": "Jefferson",
                "lat": 30.36,
                "lon": -83.24
              },
              {
                "name": "Lafayette",
                "lat": 30.27,
                "lon": -83.3
              },
              {
                "name": "Lake",
                "lat": 28.8,
                "lon": -81.62
              },
              {
                "name": "Lee",
                "lat": 26.64,
                "lon": -81.87
              },
              {
                "name": "Leon",
                "lat": 30.44,
                "lon": -84.27
              },
              {
                "name": "Levy",
                "lat": 29.33,
                "lon": -82.8
              },
              {
                "name": "Liberty",
                "lat": 30.23,
                "lon": -83.41
              },
              {
                "name": "Madison",
                "lat": 30.15,
                "lon": -83.41
              },
              {
                "name": "Manatee",
                "lat": 27.5,
                "lon": -82.31
              },
              {
                "name": "Marion",
                "lat": 29.18,
                "lon": -81.97
              },
              {
                "name": "Martin",
                "lat": 27.21,
                "lon": -80.36
              },
              {
                "name": "Miami-Dade",
                "lat": 25.76,
                "lon": -80.27
              },
              {
                "name": "Monroe",
                "lat": 24.7,
                "lon": -81.76
              },
              {
                "name": "Nassau",
                "lat": 30.65,
                "lon": -81.88
              },
              {
                "name": "Okaloosa",
                "lat": 30.62,
                "lon": -86.55
              },
              {
                "name": "Okeechobee",
                "lat": 27.25,
                "lon": -80.86
              },
              {
                "name": "Orange",
                "lat": 28.54,
                "lon": -81.3
              },
              {
                "name": "Osceola",
                "lat": 28.29,
                "lon": -81.37
              },
              {
                "name": "Palm Beach",
                "lat": 26.48,
                "lon": -80.3
              },
              {
                "name": "Pasco",
                "lat": 28.37,
                "lon": -82.35
              },
              {
                "name": "Pinellas",
                "lat": 27.91,
                "lon": -82.76
              },
              {
                "name": "Polk",
                "lat": 28.0,
                "lon": -81.76
              },
              {
                "name": "Putnam",
                "lat": 29.35,
                "lon": -81.63
              },
              {
                "name": "St. Johns",
                "lat": 29.92,
                "lon": -81.31
              },
              {
                "name": "St. Lucie",
                "lat": 27.3,
                "lon": -80.73
              },
              {
                "name": "Santa Rosa",
                "lat": 30.77,
                "lon": -86.95
              },
              {
                "name": "Sarasota",
                "lat": 27.34,
                "lon": -82.53
              },
              {
                "name": "Seminole",
                "lat": 28.7,
                "lon": -81.31
              },
              {
                "name": "Sumter",
                "lat": 28.78,
                "lon": -82.18
              },
              {
                "name": "Suwannee",
                "lat": 30.5,
                "lon": -82.96
              },
              {
                "name": "Taylor",
                "lat": 29.97,
                "lon": -83.38
              },
              {
                "name": "Union",
                "lat": 30.26,
                "lon": -82.56
              },
              {
                "name": "Volusia",
                "lat": 28.8,
                "lon": -80.95
              },
              {
                "name": "Wakulla",
                "lat": 30.26,
                "lon": -84.39
              },
              {
                "name": "Walton",
                "lat": 30.57,
                "lon": -85.98
              },
              {
                "name": "Washington",
                "lat": 30.73,
                "lon": -85.68
              }
            ]
          }
        },
        "options": {}
      }
    },
    {
      "id": "2b",
      "name": "Loop Counties",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        650,
        200
      ],
      "parameters": {
        "mode": "split",
        "splitIn": "=counties"
      }
    },
    {
      "id": "2c",
      "name": "Set Config Params",
      "type": "n8n-nodes-base.set",
      "position": [
        850,
        200
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "county_name",
              "value": "={{$json.name}}"
            },
            {
              "name": "lat",
              "value": "={{$json.lat}}"
            },
            {
              "name": "lon",
              "value": "={{$json.lon}}"
            },
            {
              "name": "county_arcgis_service",
              "value": "https://servicesX.county.gov/arcgis/rest/services/Parcels/FeatureServer"
            },
            {
              "name": "kb_id",
              "value": "={{$env['OPENWEBUI_KB_HAZARDS_ID'] || 'fl-hazards'}}"
            },
            {
              "name": "openwebui_url",
              "value": "={{$env['OPENWEBUI_API_URL'] || 'https://openwebui.local'}}"
            },
            {
              "name": "openwebui_token",
              "value": "={{$env['OPENWEBUI_API_TOKEN']}}"
            }
          ]
        },
        "options": {}
      }
    },
    {
      "id": "3",
      "name": "FEMA NFHL Flood Zone Lookup (by lat/lon)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        700,
        80
      ],
      "parameters": {
        "authentication": "none",
        "requestMethod": "GET",
        "url": "https://hazards.fema.gov/gis/nfhl/rest/services/public/NFHL/MapServer/0/query",
        "queryParametersUi": {
          "parameter": [
            {
              "name": "geometry",
              "value": "={{$node[\"Set Config Params\"].json[\"lon\"] + ',' + $node[\"Set Config Params\"].json[\"lat\"]}}"
            },
            {
              "name": "geometryType",
              "value": "esriGeometryPoint"
            },
            {
              "name": "inSR",
              "value": "4326"
            },
            {
              "name": "spatialRel",
              "value": "esriSpatialRelIntersects"
            },
            {
              "name": "outFields",
              "value": "*"
            },
            {
              "name": "f",
              "value": "json"
            }
          ]
        },
        "responseFormat": "json",
        "options": {
          "timeout": 30000
        }
      }
    },
    {
      "id": "4",
      "name": "NWS Active Alerts (by point)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        700,
        240
      ],
      "parameters": {
        "authentication": "none",
        "requestMethod": "GET",
        "url": "https://api.weather.gov/alerts/active?point={{$node[\"Set Config Params\"].json[\"lat\"]}},{{$node[\"Set Config Params\"].json[\"lon\"]}}",
        "responseFormat": "json",
        "options": {
          "headers": {
            "User-Agent": "OpenWebUI-Safety-Integrator/1.0 (contact@example.com)"
          },
          "timeout": 30000
        }
      }
    },
    {
      "id": "5",
      "name": "USGS Elevation (Point Query)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        700,
        400
      ],
      "parameters": {
        "authentication": "none",
        "requestMethod": "GET",
        "url": "https://nationalmap.gov/epqs/pqs.php?x={{$node[\"Set Config Params\"].json[\"lon\"]}}&y={{$node[\"Set Config Params\"].json[\"lat\"]}}&units=Feet&output=json",
        "responseFormat": "json",
        "options": {
          "timeout": 30000
        }
      }
    },
    {
      "id": "6",
      "name": "Normalize Hazards Results",
      "type": "n8n-nodes-base.function",
      "position": [
        950,
        240
      ],
      "parameters": {
        "functionCode": "const femaRaw = items[0].json;\nconst nwsRaw = items[1].json;\nconst usgsRaw = items[2].json;\n\nlet fema = {};\ntry { fema = (femaRaw && femaRaw.features && femaRaw.features[0]) ? (femaRaw.features[0].attributes || femaRaw.features[0]) : { note: 'No NFHL feature' }; } catch (e) { fema = { error: e.message, raw: femaRaw }; }\n\nlet nwsAlerts = {};\ntry { nwsAlerts = (nwsRaw && nwsRaw.features) ? nwsRaw.features.map(f => ({ id: f.id, properties: f.properties })) : { note: 'No active alerts for point' }; } catch (e) { nwsAlerts = { error: e.message, raw: nwsRaw }; }\n\nlet elevation = {};\ntry { elevation = usgsRaw && usgsRaw.USGS_Elevation_Point_Query_Service ? usgsRaw.USGS_Elevation_Point_Query_Service.Elevation_Query : { note: 'No elevation result' }; } catch (e) { elevation = { error: e.message, raw: usgsRaw }; }\n\nconst content = {\n  period: new Date().toISOString(),\n  county: $node[\"Set Config Params\"].json.county_name,\n  lat: $node[\"Set Config Params\"].json.lat,\n  lon: $node[\"Set Config Params\"].json.lon,\n  fema_nfhl: fema,\n  nws_active_alerts: nwsAlerts,\n  elevation: elevation\n};\n\nconst contentText = `Hazard Report for ${$node[\"Set Config Params\"].json.county_name} County, FL\nLocation: ${$node[\"Set Config Params\"].json.lat}, ${$node[\"Set Config Params\"].json.lon}\nGenerated: ${content.period}\n\nFEMA Flood Zone: ${JSON.stringify(fema, null, 2)}\n\nActive Weather Alerts: ${JSON.stringify(nwsAlerts, null, 2)}\n\nElevation Data: ${JSON.stringify(elevation, null, 2)}`;\n\nreturn [{ json: { content, contentText } }];"
      }
    },
    {
      "id": "7",
      "name": "Inject to OpenWebUI KB via Text API (CORRECT)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1250,
        240
      ],
      "parameters": {
        "authentication": "none",
        "requestMethod": "POST",
        "url": "={{$node[\"Set Config Params\"].json['openwebui_url']}}/api/retrieval/process/text",
        "headers": {
          "Authorization": "Bearer {{$node[\"Set Config Params\"].json['openwebui_token']}}",
          "Content-Type": "application/json"
        },
        "jsonParameters": true,
        "bodyParametersJson": "={\n  \"name\": \"Hazard Report {{$node[\\\"Set Config Params\\\"].json['county_name']}} {{new Date().toISOString().split('T')[0]}}\",\n  \"content\": {{JSON.stringify($node[\\\"Normalize Hazards Results\\\"].json.contentText)}},\n  \"collection_name\": \"{{$node[\\\"Set Config Params\\\"].json['kb_id']}}\"\n}",
        "options": {
          "timeout": 30000,
          "otherOptions": {
            "allowUnauthenticatedDownloads": false
          }
        }
      }
    },
    {
      "id": "8",
      "name": "Return Success",
      "type": "n8n-nodes-base.set",
      "position": [
        1500,
        240
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "status",
              "value": "success"
            },
            {
              "name": "message",
              "value": "Data injected into OpenWebUI KB"
            },
            {
              "name": "county",
              "value": "={{$node[\"Set Config Params\"].json['county_name']}}"
            },
            {
              "name": "timestamp",
              "value": "={{new Date().toISOString()}}"
            }
          ]
        },
        "options": {}
      }
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Set Input Params",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Input Params": {
      "main": [
        [
          {
            "node": "Florida Counties List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Florida Counties List": {
      "main": [
        [
          {
            "node": "Loop Counties",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Counties": {
      "main": [
        [
          {
            "node": "Set Config Params",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Config Params": {
      "main": [
        [
          {
            "node": "FEMA NFHL Flood Zone Lookup (by lat/lon)",
            "type": "main",
            "index": 0
          },
          {
            "node": "NWS Active Alerts (by point)",
            "type": "main",
            "index": 0
          },
          {
            "node": "USGS Elevation (Point Query)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "FEMA NFHL Flood Zone Lookup (by lat/lon)": {
      "main": [
        [
          {
            "node": "Normalize Hazards Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "NWS Active Alerts (by point)": {
      "main": [
        [
          {
            "node": "Normalize Hazards Results",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "USGS Elevation (Point Query)": {
      "main": [
        [
          {
            "node": "Normalize Hazards Results",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Normalize Hazards Results": {
      "main": [
        [
          {
            "node": "Inject to OpenWebUI KB via Text API (CORRECT)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Inject to OpenWebUI KB via Text API (CORRECT)": {
      "main": [
        [
          {
            "node": "Return Success",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "saveExecutionProgress": true,
    "errorWorkflow": "error_handler_workflow_id"
  },
  "staticData": {},
  "notes": "FIXED VERSION: Uses correct OpenWebUI API endpoints with Bearer token authentication. Converts data to text format for /api/retrieval/process/text endpoint."
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

FL Hazards -> OpenWebUI KB (hazards) - FIXED. Uses itemLists, httpRequest. Event-driven trigger; 11 nodes.

Source: https://github.com/beaudamore/openwebui-repliers-real-estate-tool/blob/b3e659fd3d57bf9d4e08d7b295b96e79d01ab15c/n8n/hazards.json — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Web Scraping

Pulling Data From Services That N8N Doesnt Have A Pre Built Integration For. Uses manualTrigger, stickyNote, itemLists, htmlExtract. Event-driven trigger; 14 nodes.

Item Lists, Html Extract, HTTP Request
Web Scraping

Workflow 1748. Uses itemLists, htmlExtract, httpRequest. Event-driven trigger; 14 nodes.

Item Lists, Html Extract, HTTP Request
Web Scraping

Create An Rss Feed Based On A Website S Content. Uses manualTrigger, itemLists, htmlExtract, httpRequest. Event-driven trigger; 12 nodes.

Item Lists, Html Extract, HTTP Request +1
Web Scraping

Rss Feed For Ard Audiothek Podcasts. Uses manualTrigger, httpRequest, htmlExtract, itemLists. Event-driven trigger; 11 nodes.

HTTP Request, Html Extract, Item Lists
Web Scraping

This workflow enriches new accounts in Pipedrive using Datagma API by adding data about ICP (ideal customer profile). Instead of Pipedrive, you can use any other CRM. In this example, ideal buyers are

Item Lists, Pipedrive, HTTP Request +1