AutomationFlowsData & Sheets › Export All Strava Activity Data to Google Sheets

Export All Strava Activity Data to Google Sheets

BySherlockes @sherlockes on n8n.io

Save the data of activities recorded and stored in Strava to a Google Sheets document. We have a Google Sheets spreadsheet where each row represents a Strava activity with the date, reference, distance, time, and elevation. Periodically, the workflow checks the latest activities…

Cron / scheduled trigger★★★★☆ complexity13 nodesStravaGoogle Sheets
Data & Sheets Trigger: Cron / scheduled Nodes: 13 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #2678 — we link there as the canonical source.

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
{
  "nodes": [
    {
      "id": "fc128eed-1666-46b8-8feb-e6ddf05e85d1",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        380,
        240
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 2
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "830708eb-197b-4bf7-95da-893d78329ab2",
      "name": "Strava",
      "type": "n8n-nodes-base.strava",
      "position": [
        380,
        480
      ],
      "parameters": {
        "limit": 10,
        "operation": "getAll"
      },
      "typeVersion": 1.1
    },
    {
      "id": "de776ebf-3ad5-4c4c-b0c8-7bc74cba5446",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        380,
        740
      ],
      "parameters": {
        "jsCode": "// Obt\u00e9n los items del nodo \"Strava\"\nconst stravaItems = $('strava_last').all();\n\n// Obt\u00e9n los items del nodo \"ultimas_id\"\nconst ultimasGuardadasItems = $('saved_last').all();\n\n// Extrae las referencias guardadas en un Set, asegurando el formato como cadena\nconst referenciasGuardadas = new Set(\n    ultimasGuardadasItems.map(item => String(item.json.id))\n);\n\n// Filtra los items de \"Strava\" cuyos IDs no est\u00e9n en las referencias guardadas\nconst filteredItems = stravaItems.filter(item => {\n    // Convertir el ID actual de Strava a cadena para comparar correctamente\n    return !referenciasGuardadas.has(String(item.json.id));\n});\n\n// Depuraci\u00f3n: imprime las referencias y los resultados\nconsole.log('Referencias guardadas:', [...referenciasGuardadas]);\nconsole.log('Items filtrados:', filteredItems);\n\n// Devuelve los items filtrados\nreturn filteredItems;\n\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c8a93e6e-67fc-4f6d-bcde-83d3a885c622",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        900,
        740
      ],
      "parameters": {
        "columns": {
          "value": {
            "Kms": "={{ $json.distancia }}",
            "Ref": "={{ $json.id }}",
            "Fecha": "={{ $json.fecha }}",
            "Track": "=http://www.strava.com/activities/{{ $json.id }}",
            "Tiempo": "={{ $json.tiempo }}",
            "Desnivel": "={{ $json.elevacion }}"
          },
          "schema": [
            {
              "id": "Fecha",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Fecha",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Kms",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Kms",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tiempo",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Tiempo",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ref",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Ref",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Track",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Track",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Bicicleta",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Bicicleta",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Terreno",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Terreno",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Desnivel",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Desnivel",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": []
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 419561402,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs/edit#gid=419561402",
          "cachedResultName": "n8n"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs/edit?usp=drivesdk",
          "cachedResultName": "Sherlo_Bike"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "0ce07d54-97af-4e88-9d27-452191a0b3ba",
      "name": "strava_last",
      "type": "n8n-nodes-base.set",
      "position": [
        1420,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "423ae4b8-287c-4dc1-b32b-d1b6f1f45efa",
              "name": "id",
              "type": "number",
              "value": "={{ $json.id }}"
            },
            {
              "id": "595802d2-17d0-40be-9e43-d655ffbf4ce0",
              "name": "fecha",
              "type": "string",
              "value": "={{ DateTime.fromISO($json.start_date_local).toFormat('d/M/yyyy') }}"
            },
            {
              "id": "4b39d783-19f2-4a7e-b0e6-dbe2b98f1ae0",
              "name": "distancia",
              "type": "number",
              "value": "={{ Math.round($json.distance / 100) / 10 }}"
            },
            {
              "id": "2f321dc0-435f-4b4d-866c-091ff9eaf9df",
              "name": "elevacion",
              "type": "number",
              "value": "={{ Math.round($json.total_elevation_gain) }}"
            },
            {
              "id": "ba1bb089-5ae7-4e42-ac65-07323c4e1842",
              "name": "tiempo",
              "type": "string",
              "value": "={{ `${Math.floor($json.moving_time / 3600)}:${Math.floor(($json.moving_time % 3600) / 60).toString().padStart(2, '0')}:${($json.moving_time % 60).toString().padStart(2, '0')}` }}\n"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "490f7be9-73c9-4431-8b83-fcdbbcc283eb",
      "name": "Remove Duplicates",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        900,
        480
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {},
        "fieldsToCompare": "id"
      },
      "typeVersion": 2
    },
    {
      "id": "2d1c4dc5-2baa-4c89-a312-4b40381d4e5d",
      "name": "activities",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        660,
        240
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 419561402,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs/edit#gid=419561402",
          "cachedResultName": "n8n"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs/edit?usp=drivesdk",
          "cachedResultName": "Sherlo_Bike"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "2c7b7939-4ca1-4868-92bf-5fd7384a1103",
      "name": "sort_saved",
      "type": "n8n-nodes-base.sort",
      "position": [
        900,
        240
      ],
      "parameters": {
        "options": {},
        "sortFieldsUi": {
          "sortField": [
            {
              "fieldName": "Ref"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4e1d9064-6dda-4a01-af48-f278792f8b6b",
      "name": "last_saved",
      "type": "n8n-nodes-base.limit",
      "position": [
        1160,
        240
      ],
      "parameters": {
        "keep": "lastItems",
        "maxItems": 10
      },
      "typeVersion": 1
    },
    {
      "id": "6eb2053a-1101-477b-86e9-113813be2d92",
      "name": "saved_last",
      "type": "n8n-nodes-base.set",
      "position": [
        1420,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "50097932-ab91-4af7-9412-925fab1982f0",
              "name": "id",
              "type": "string",
              "value": "={{ $json.Ref }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "afd986f1-0c49-4a69-b948-aefcbff1010f",
      "name": "sort_strava",
      "type": "n8n-nodes-base.sort",
      "position": [
        660,
        480
      ],
      "parameters": {
        "options": {},
        "sortFieldsUi": {
          "sortField": [
            {
              "fieldName": "id"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "16094d29-f35b-492c-9d93-3145dab30cd3",
      "name": "last_strava",
      "type": "n8n-nodes-base.limit",
      "position": [
        1160,
        480
      ],
      "parameters": {
        "keep": "lastItems",
        "maxItems": 10
      },
      "typeVersion": 1
    },
    {
      "id": "9986360b-fcd3-42f4-ad13-aea69f6d1a80",
      "name": "sort_results",
      "type": "n8n-nodes-base.sort",
      "position": [
        660,
        740
      ],
      "parameters": {
        "options": {},
        "sortFieldsUi": {
          "sortField": [
            {
              "fieldName": "id"
            }
          ]
        }
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "sort_results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Strava": {
      "main": [
        [
          {
            "node": "sort_strava",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "activities": {
      "main": [
        [
          {
            "node": "sort_saved",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "last_saved": {
      "main": [
        [
          {
            "node": "saved_last",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "saved_last": {
      "main": [
        [
          {
            "node": "Strava",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "sort_saved": {
      "main": [
        [
          {
            "node": "last_saved",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "last_strava": {
      "main": [
        [
          {
            "node": "strava_last",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "sort_strava": {
      "main": [
        [
          {
            "node": "Remove Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "strava_last": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "sort_results": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "activities",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates": {
      "main": [
        [
          {
            "node": "last_strava",
            "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

Save the data of activities recorded and stored in Strava to a Google Sheets document. We have a Google Sheets spreadsheet where each row represents a Strava activity with the date, reference, distance, time, and elevation. Periodically, the workflow checks the latest activities…

Source: https://n8n.io/workflows/2678/ — 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

This workflow automates video distribution to 9 social platforms simultaneously using Blotato's API. It includes both a scheduled publisher (checks Google Sheets for videos marked "Ready") and a subwo

Google Sheets, HTTP Request, Form Trigger +2
Data & Sheets

YogiAI. Uses googleSheets, googleSheetsTool, httpRequest, stopAndError. Scheduled trigger; 61 nodes.

Google Sheets, Google Sheets Tool, HTTP Request +1
Data & Sheets

This workflow monitors Google Calendar for events indicating that a customer will visit the company today or the next day, retrieves the required details, and sends reminder notifications to the relev

Google Calendar, Google Sheets, HTTP Request +1
Data & Sheets

Useful if a team is working within a single instance and you want to be notified of what workflows have changed since you last visited them. Another use-case might be monitoring your managed instances

Google Sheets, Execute Workflow Trigger, n8n
Data & Sheets

ofn hook v0.24.0 beta. Uses start, httpRequest, functionItem, itemLists. Scheduled trigger; 42 nodes.

Start, HTTP Request, Function Item +3