AutomationFlowsData & Sheets › Import CSV from URL to Google Sheets

Import CSV from URL to Google Sheets

Original n8n title: Import CSV From URL to Googlesheet

Import CSV from URL to GoogleSheet. Uses manualTrigger, googleSheets, spreadsheetFile, httpRequest. Event-driven trigger; 7 nodes.

Event trigger★★★★☆ complexity7 nodesGoogle SheetsSpreadsheet FileHTTP Request
Data & Sheets Trigger: Event Nodes: 7 Complexity: ★★★★☆ Added:

This workflow follows the Google Sheets → HTTP Request 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
{
  "id": "NLVfecejH0cTtcdd",
  "name": "Import CSV from URL to GoogleSheet",
  "tags": [],
  "nodes": [
    {
      "id": "90cced3d-b03b-4b51-b1f7-4cbd2dac25eb",
      "name": "When clicking \"Execute Workflow\"",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        860,
        380
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "df9519b6-937e-4a9e-bdb9-86fb722ca3c1",
      "name": "Upload to spreadsheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1880,
        380
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "unique_key",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "unique_key",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "\ufeffcountry",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "\ufeffcountry",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "country_code",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "country_code",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "year_week",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "year_week",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "level",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "level",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "region",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "region",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "region_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "region_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "new_cases",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "new_cases",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tests_done",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "tests_done",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "population",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "population",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "testing_rate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "testing_rate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "positivity_rate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "positivity_rate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "testing_data_source",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "testing_data_source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "unique_key"
          ]
        },
        "options": {
          "cellFormat": "USER_ENTERED"
        },
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 383583634,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/13YYuEJ1cDf-t8P2MSTFWnnNHCreQ6Zo8oPSp7WeNnbY/edit#gid=383583634",
          "cachedResultName": "COVID-weekly"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/13YYuEJ1cDf-t8P2MSTFWnnNHCreQ6Zo8oPSp7WeNnbY"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "8298b29e-8784-4e15-902f-dc073fa73668",
      "name": "Add unique field",
      "type": "n8n-nodes-base.set",
      "position": [
        1460,
        380
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "unique_key",
              "stringValue": "={{ $json.country_code }}-{{ $json.year_week }}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "b71bb998-4df2-4311-ae98-42c3e5e41d58",
      "name": "Import CSV",
      "type": "n8n-nodes-base.spreadsheetFile",
      "position": [
        1260,
        380
      ],
      "parameters": {
        "options": {
          "headerRow": true
        },
        "fileFormat": "csv"
      },
      "typeVersion": 2
    },
    {
      "id": "36204081-3995-46d4-ac8f-3408cbaed657",
      "name": "Download CSV",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1060,
        380
      ],
      "parameters": {
        "url": "https://opendata.ecdc.europa.eu/covid19/testing/csv/data.csv",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.1
    },
    {
      "id": "b1a78d2e-1a8b-4d98-b130-080b3017192d",
      "name": "Keep only DACH in 2023",
      "type": "n8n-nodes-base.filter",
      "position": [
        1680,
        380
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.year_week }}",
              "value2": "2023",
              "operation": "startsWith"
            }
          ],
          "boolean": [
            {
              "value1": "={{ ['DE', 'AT', 'CH'].includes($json.country_code )}}",
              "value2": true
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c5a3af9b-30a0-4337-bbb7-cff54007b22f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1620,
        241
      ],
      "parameters": {
        "width": 460,
        "height": 293,
        "content": "### Google API has rate-limits for read and write operations, that's why we take only a subset of the data\n\nTo import the whole dataset please add Split In Batches and a Wait node with a sufficient delay."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d49a3f54-a422-4e76-b410-f8c12b4dd78b",
  "connections": {
    "Import CSV": {
      "main": [
        [
          {
            "node": "Add unique field",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download CSV": {
      "main": [
        [
          {
            "node": "Import CSV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add unique field": {
      "main": [
        [
          {
            "node": "Keep only DACH in 2023",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Keep only DACH in 2023": {
      "main": [
        [
          {
            "node": "Upload to spreadsheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \"Execute Workflow\"": {
      "main": [
        [
          {
            "node": "Download CSV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

Import CSV from URL to GoogleSheet. Uses manualTrigger, googleSheets, spreadsheetFile, httpRequest. Event-driven trigger; 7 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

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

Data & Sheets

cdp_router. Uses gmailTrigger, telegramTrigger, googleSheets, httpRequest. Event-driven trigger; 53 nodes.

Gmail Trigger, Telegram Trigger, Google Sheets +4
Data & Sheets

cdp_router. Uses gmailTrigger, telegramTrigger, googleSheets, httpRequest. Event-driven trigger; 53 nodes.

Gmail Trigger, Telegram Trigger, Google Sheets +4
Data & Sheets

This n8n workflow automates the process of fetching user data from an API, verifying its validity, transforming the response, and then saving it to Google Sheets for team collaboration. Additionally,

HTTP Request, Google Sheets, Spreadsheet File +1
Data & Sheets

Shopify Csv Import. Uses formTrigger, moveBinaryData, spreadsheetFile, googleSheets. Event-driven trigger; 12 nodes.

Form Trigger, Move Binary Data, Spreadsheet File +2
Data & Sheets

Import Csv From Url To Google Sheets. Uses manualTrigger, googleSheets, spreadsheetFile, httpRequest. Event-driven trigger; 7 nodes.

Google Sheets, Spreadsheet File, HTTP Request