AutomationFlowsData & Sheets › Sync Face-to-face Fundraising Data From Offline Google Sheets to Sinergiacrm

Sync Face-to-face Fundraising Data From Offline Google Sheets to Sinergiacrm

ByJavier Quilez Cabello @javierquilez on n8n.io

Automate syncing of offline donor data from Google Sheets into SinergiaCRM for fast, error-free face-to-face fundraising tracking.

Event trigger★★★★☆ complexity19 nodesN8N Nodes SinergiacrmGoogle Sheets TriggerGoogle Sheets
Data & Sheets Trigger: Event Nodes: 19 Complexity: ★★★★☆ Added:
Sync Face-to-face Fundraising Data From Offline Google Sheets to Sinergiacrm — n8n workflow card showing N8N Nodes Sinergiacrm, Google Sheets Trigger, Google Sheets integration

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

This workflow follows the Google Sheets → Googlesheetstrigger 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": "n3Mm8HlL7xBrM8nC",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Sync face-to-face fundraising data from offline Google Sheets to SinergiaCRM",
  "tags": [
    {
      "id": "52gEP1RAeC1i5aJZ",
      "name": "n8n Creator",
      "createdAt": "2025-08-27T11:32:09.072Z",
      "updatedAt": "2025-08-27T11:32:09.072Z"
    }
  ],
  "nodes": [
    {
      "id": "70d41235-6145-4c9b-b488-b952dbc3a9ef",
      "name": "Combinar ID del CRM",
      "type": "n8n-nodes-base.merge",
      "position": [
        832,
        -848
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "advanced": true,
        "joinMode": "enrichInput2",
        "mergeByFields": {
          "values": [
            {
              "field1": "attributes.stic_identification_number_c",
              "field2": "NIF"
            }
          ]
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "ae03448e-f0f8-483f-b47f-20e559a89841",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        1056,
        -848
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "551c98ad-18dc-4123-8e7e-65f88de385e1",
              "name": "First name",
              "type": "string",
              "value": "={{ $json['First name'] }}"
            },
            {
              "id": "1c06fe43-c098-44bf-8701-130fa167ed34",
              "name": "Last name",
              "type": "string",
              "value": "={{ $json['Last name'] }}"
            },
            {
              "id": "0abf9847-0966-4fa9-8852-decd2c4e1b73",
              "name": "NIF",
              "type": "string",
              "value": "={{ $json.NIF }}"
            },
            {
              "id": "e32878ed-45a5-490d-8e4f-e53118da990b",
              "name": "Email",
              "type": "string",
              "value": "={{ $json.Email }}"
            },
            {
              "id": "c631ca9e-3c1a-47db-90a2-2c73dca606cc",
              "name": "Periodicity",
              "type": "string",
              "value": "={{ $json['Periodicity'] }}"
            },
            {
              "id": "606f2511-b430-4c01-b9a5-560ac34bc068",
              "name": "Amount",
              "type": "string",
              "value": "={{ $json['Amount'] }}"
            },
            {
              "id": "775f3a67-4333-45a4-94ee-0da2bddcfedf",
              "name": "Bank Account",
              "type": "string",
              "value": "={{ $json['Bank Account'] }}"
            },
            {
              "id": "632788f1-5b4c-4113-ae73-ee16421820c5",
              "name": "id",
              "type": "string",
              "value": "={{ $json.id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b469d896-4340-4870-9289-1a6a8af84789",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -1728
      ],
      "parameters": {
        "width": 448,
        "height": 1152,
        "content": "Automate syncing of offline donor data from Google Sheets into SinergiaCRM for fast, error-free face-to-face fundraising tracking.\n\n### Who is this workflow for?\nThis workflow is perfect for nonprofit organizations that run face-to-face fundraising campaigns and collect donor data offline (e.g. via tablets or spreadsheets). It helps fundraising and CRM teams ensure donor records are correctly and automatically stored in **SinergiaCRM**, a popular CRM platform used by NGOs.\n\n### What it does / How it works\n- Watches a Google Sheet for new rows (also works offline if synced later).\n- Filters rows marked `To CRM = Yes` and `Processed = No`.\n- Checks if the donor already exists in **SinergiaCRM** (based on NIF).\n- If the contact exists: creates a \u201cmember\u201d relationship and a payment commitment.\n- If not: creates the contact first, then adds the relationship and commitment.\n- Finally, updates the original row as \u201cProcessed\u201d to prevent re-importing.\n\n### Requirements\n- An active **Google Sheets** account with the donor spreadsheet.\n- A **SinergiaCRM** account with API/OAuth access.\n- Fields `First name`, `Last name`, `Email`, `NIF`, `To CRM`, `Processed` must exist in the sheet.\n- SinergiaCRM modules enabled: Contacts, stic_Contacts_Relationships, stic_Payment_Commitments.\n\n### How to set up\n1. Connect your **Google Sheets** account and set the correct Document ID and Sheet name in the trigger and update nodes.  \n2. Connect your **SinergiaCRM** account using OAuth credentials.  \n3. Adjust the `assigned_user_id` field if required by your CRM instance.  \n\n### How to customize the workflow\n- Change the filter conditions in the IF nodes to match your business logic.\n- Customize fields like relationship type, amount, and periodicity to suit your campaign.\n- Add or remove nodes if you want additional steps (like sending Slack notifications).\n\n\ud83d\udccc Category: **CRM & Customer Management**  \n\ud83d\udcd8 [Learn more about SinergiaCRM](https://sinergiacrm.org)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "25950fcd-ff8c-4d58-bcf3-06e2ba0d5b7f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -1088
      ],
      "parameters": {
        "width": 432,
        "height": 512,
        "content": "## \ud83d\udfe2 Trigger: New Offline Donation Entry\nThis workflow starts when a new row is added in the Google Sheet.\nMake sure your sheet includes columns: First name, Last name, Email, NIF, To CRM, Processed\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e4f93b11-b9bb-4d10-8ebc-4c8b2052fc05",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        144,
        -1344
      ],
      "parameters": {
        "width": 832,
        "height": 768,
        "content": "## SinergiaCRM Setup Requirements\n\nEnsure these modules are enabled in your SinergiaCRM instance:\n- Contacts\n- stic_Contacts_Relationships\n- stic_Payment_Commitments\n\nAuthentication:\n1) Configure OAuth credentials for your SinergiaCRM account in n8n.\n2) Adjust the `\"assigned_user_id\"` field if your instance requires a different user.\n\nImportant notes:\n- Contact matching uses the custom field `stic_identification_number_c` (NIF).\n- Payment Commitments require valid values for amount, periodicity, and bank account.\n- The workflow sets the first payment date automatically to the current date (dd/mm/yyyy).\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3a61fc6f-8f82-4bcf-9948-189d4f5146e7",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        -1344
      ],
      "parameters": {
        "width": 1024,
        "height": 768,
        "content": "## Contact Existence Logic\n\nThis IF node decides the workflow path based on whether the contact exists in SinergiaCRM:\n\n- \u2705 If the contact exists (matched by NIF), the workflow creates:\n   \u2022 a \u201cmember\u201d relationship\n   \u2022 a payment commitment\n\n- \u274c If the contact does not exist, the workflow first creates the contact,\n   then creates the relationship and payment commitment.\n\nMatching is based on the custom field `stic_identification_number_c` (NIF).\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "cc70ad72-3799-4efa-abdc-6e7d1e938eb9",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        -1072
      ],
      "parameters": {
        "width": 528,
        "height": 496,
        "content": "## \ud83d\udd35 Mark as Processed\nThis step updates the sheet to prevent duplicate imports.\nIt matches rows using the NIF field.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "790d5db6-9074-4cd5-bd82-b2b66d11d782",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2640,
        -976
      ],
      "parameters": {
        "width": 448,
        "height": 400,
        "content": "## Troubleshooting Tips\n\n- Ensure your Google Sheet column names match exactly (case and spacing).\n- If no contact is found/created, check the NIF value and confirm the field `stic_identification_number_c` exists in SinergiaCRM.\n- If the payment commitment fails, verify Amount, Periodicity, and Bank Account values.\n- Review execution logs in n8n for API or authentication errors.\n- Confirm that your SinergiaCRM OAuth credentials are valid and that the user has access to the required modules.\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "65eb5af2-649c-4d06-8f55-748e9fbca656",
      "name": "SinergiaCRM: Create Payment Commitment",
      "type": "n8n-nodes-sinergiacrm.sinergiaCrm",
      "position": [
        1728,
        -944
      ],
      "parameters": {
        "data": "={\n\"stic_payment_commitments_contactscontacts_ida\": \"{{ $('Check if Contact Already Exists in CRM').item.json.id }}\",\n\"amount\": \"{{ $('New Row in Google Sheets (Offline Donations)').item.json.Amount }}\",\n\"first_payment_date\": \"{{ ('0' + new Date().getDate()).slice(-2) + '/' + ('0' + (new Date().getMonth() + 1)).slice(-2) + '/' + new Date().getFullYear() }}\",\n\"periodicity\": \"{{ $('New Row in Google Sheets (Offline Donations)').item.json.Periodicity }}\",\n\"payment_method\": \"direct_debit\",\n\"payment_type\": \"fee\",\n\"bank_account\": \"{{ $('New Row in Google Sheets (Offline Donations)').item.json['Bank Account'] }}\",\n\"channel\": \"face_to_face\",\n\"transaction_type\": \"income\"\n}",
        "module": "stic_Payment_Commitments",
        "operation": "create"
      },
      "credentials": {
        "SinergiaCRMCredentials": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "cc3969df-c615-427f-aee8-6639a5c87311",
      "name": "New Row in Google Sheets (Offline Donations)",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -96,
        -848
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {
          "valueRender": "FORMATTED_VALUE"
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1285276483,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XRjRmPPv5ToZ5ZsFQyX1o5g8pWg-rod0yOmkKO-Ec3A/edit#gid=1285276483",
          "cachedResultName": "Sheet2"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1XRjRmPPv5ToZ5ZsFQyX1o5g8pWg-rod0yOmkKO-Ec3A",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XRjRmPPv5ToZ5ZsFQyX1o5g8pWg-rod0yOmkKO-Ec3A/edit?usp=drivesdk",
          "cachedResultName": "SinergiaCRM - Workflows"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "52910480-234b-4387-bd7e-68d7364a0c25",
      "name": "Check if Row Should Go to CRM",
      "type": "n8n-nodes-base.if",
      "position": [
        160,
        -848
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "140b0257-5336-4f90-aceb-ecae84dedb32",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json['To CRM'] }}",
              "rightValue": "Yes"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "c2ef6aa8-d6db-48c0-8a5c-f8a24a917a60",
      "name": "Check if Row Has Not Been Processed",
      "type": "n8n-nodes-base.if",
      "position": [
        384,
        -848
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f174aa87-e1ee-4877-9de8-282b314724e4",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.Processed }}",
              "rightValue": "No"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "4695eff9-291b-41c5-b1b2-f5617526ca01",
      "name": "Find Existing Contact in CRM by NIF",
      "type": "n8n-nodes-sinergiacrm.sinergiaCrm",
      "position": [
        608,
        -976
      ],
      "parameters": {
        "module": "Contacts",
        "options": {
          "filters": {
            "Filter": [
              {
                "field": "stic_identification_number_c",
                "value": "={{ $json.NIF }}"
              }
            ]
          }
        }
      },
      "credentials": {
        "SinergiaCRMCredentials": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "2a6633dd-7168-41ee-97ee-3891c295a0f0",
      "name": "Check if Contact Already Exists in CRM",
      "type": "n8n-nodes-base.if",
      "position": [
        1280,
        -848
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "92d7b7c4-2564-4eec-ab05-586340a484ec",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": ""
            }
          ]
        }
      },
      "notesInFlow": false,
      "typeVersion": 2.2
    },
    {
      "id": "b0af0e80-951d-4b50-b299-c385d5041fd7",
      "name": "Create New Contact in SinergiaCRM",
      "type": "n8n-nodes-sinergiacrm.sinergiaCrm",
      "position": [
        1504,
        -752
      ],
      "parameters": {
        "data": "={\n  \"first_name\": \"{{ $json['First name'] }}\",\n  \"last_name\":  \"{{ $json['Last name'] }}\",\n  \"email1\":     \"{{ $json.Email }}\",\n  \"stic_identification_type_c\": \"nif\",\n  \"stic_identification_number_c\": \"{{ $json.NIF }}\"\n}\n",
        "module": "Contacts",
        "operation": "create"
      },
      "credentials": {
        "SinergiaCRMCredentials": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4ebdb785-1e0d-409f-b800-c83360272ec0",
      "name": "Create Member Relationship in SinergiaCRM",
      "type": "n8n-nodes-sinergiacrm.sinergiaCrm",
      "position": [
        1504,
        -944
      ],
      "parameters": {
        "data": "={\n  \"start_date\": \"{{ ('0' + new Date().getDate()).slice(-2) + '/' + ('0' + (new Date().getMonth() + 1)).slice(-2) + '/' + new Date().getFullYear() }}\",\n  \"relationship_type\": \"member\",\n  \"stic_contacts_relationships_contactscontacts_ida\": \"{{ $json.id }}\",\n  \"assigned_user_id\": \"2\"\n}",
        "module": "stic_Contacts_Relationships",
        "operation": "create"
      },
      "credentials": {
        "SinergiaCRMCredentials": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "55708fc4-56cf-4cf6-84ca-808e92fb412c",
      "name": "Create Member Relationship in SinergiaCRM 2",
      "type": "n8n-nodes-sinergiacrm.sinergiaCrm",
      "position": [
        1696,
        -752
      ],
      "parameters": {
        "data": "={\n  \"start_date\": \"{{ ('0' + new Date().getDate()).slice(-2) + '/' + ('0' + (new Date().getMonth() + 1)).slice(-2) + '/' + new Date().getFullYear() }}\",\n  \"relationship_type\": \"member\",\n  \"stic_contacts_relationships_contactscontacts_ida\": \"{{ $json.id }}\",\n  \"assigned_user_id\": \"2\"\n}",
        "module": "stic_Contacts_Relationships",
        "operation": "create"
      },
      "credentials": {
        "SinergiaCRMCredentials": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c2c53955-96db-475c-91bb-16b8e654af66",
      "name": "SinergiaCRM: Create Payment Commitment 2",
      "type": "n8n-nodes-sinergiacrm.sinergiaCrm",
      "position": [
        1904,
        -752
      ],
      "parameters": {
        "data": "={\n\"stic_payment_commitments_contactscontacts_ida\": \"{{ $('Create New Contact in SinergiaCRM').item.json.id }}\",\n\"amount\": \"{{ $('New Row in Google Sheets (Offline Donations)').item.json.Amount }}\",\n\"first_payment_date\": \"{{ ('0' + new Date().getDate()).slice(-2) + '/' + ('0' + (new Date().getMonth() + 1)).slice(-2) + '/' + new Date().getFullYear() }}\",\n\"periodicity\": \"{{ $('New Row in Google Sheets (Offline Donations)').item.json.Periodicity }}\",\n\"payment_method\": \"direct_debit\",\n\"payment_type\": \"fee\",\n\"bank_account\": \"{{ $('New Row in Google Sheets (Offline Donations)').item.json['Bank Account'] }}\",\n\"channel\": \"face_to_face\",\n\"transaction_type\": \"income\"\n}",
        "module": "stic_Payment_Commitments",
        "operation": "create"
      },
      "credentials": {
        "SinergiaCRMCredentials": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "699157a2-198e-4985-8067-d8f242f2044b",
      "name": "Mark Row as Processed in Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2176,
        -944
      ],
      "parameters": {
        "columns": {
          "value": {
            "NIF": "={{ $('Check if Contact Already Exists in CRM').item.json.NIF }}",
            "Processed": "Yes"
          },
          "schema": [
            {
              "id": "First name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "First name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Last name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "NIF",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "NIF",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Relation type",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Relation type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Relation date",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Relation date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Event ID",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Event ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Registration date",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Registration date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "To CRM",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "To CRM",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Processed",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Processed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "NIF"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1285276483,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XRjRmPPv5ToZ5ZsFQyX1o5g8pWg-rod0yOmkKO-Ec3A/edit#gid=1285276483",
          "cachedResultName": "Sheet2"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1XRjRmPPv5ToZ5ZsFQyX1o5g8pWg-rod0yOmkKO-Ec3A",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XRjRmPPv5ToZ5ZsFQyX1o5g8pWg-rod0yOmkKO-Ec3A/edit?usp=drivesdk",
          "cachedResultName": "SinergiaCRM - Workflows"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4
    }
  ],
  "active": false,
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": "u9Tk2Qoss5uVjdTl",
    "executionOrder": "v1",
    "executionTimeout": 900,
    "saveExecutionProgress": true,
    "timeSavedPerExecution": 5
  },
  "versionId": "47c9dfd0-9afa-4f2a-be00-96eacc6e8cc3",
  "connections": {
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Check if Contact Already Exists in CRM",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combinar ID del CRM": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if Row Should Go to CRM": {
      "main": [
        [
          {
            "node": "Check if Row Has Not Been Processed",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Create New Contact in SinergiaCRM": {
      "main": [
        [
          {
            "node": "Create Member Relationship in SinergiaCRM 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if Row Has Not Been Processed": {
      "main": [
        [
          {
            "node": "Find Existing Contact in CRM by NIF",
            "type": "main",
            "index": 0
          },
          {
            "node": "Combinar ID del CRM",
            "type": "main",
            "index": 1
          }
        ],
        []
      ]
    },
    "Find Existing Contact in CRM by NIF": {
      "main": [
        [
          {
            "node": "Combinar ID del CRM",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Row as Processed in Google Sheet": {
      "main": [
        []
      ]
    },
    "Check if Contact Already Exists in CRM": {
      "main": [
        [
          {
            "node": "Create Member Relationship in SinergiaCRM",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create New Contact in SinergiaCRM",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SinergiaCRM: Create Payment Commitment": {
      "main": [
        [
          {
            "node": "Mark Row as Processed in Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SinergiaCRM: Create Payment Commitment 2": {
      "main": [
        [
          {
            "node": "Mark Row as Processed in Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Member Relationship in SinergiaCRM": {
      "main": [
        [
          {
            "node": "SinergiaCRM: Create Payment Commitment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Member Relationship in SinergiaCRM 2": {
      "main": [
        [
          {
            "node": "SinergiaCRM: Create Payment Commitment 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New Row in Google Sheets (Offline Donations)": {
      "main": [
        [
          {
            "node": "Check if Row Should Go to CRM",
            "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

Automate syncing of offline donor data from Google Sheets into SinergiaCRM for fast, error-free face-to-face fundraising tracking.

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

What Problem Does It Solve? Manually entering hundreds of products from a spreadsheet into Odoo is slow, repetitive, and prone to human error. Ensuring that barcodes are unique and products aren't dup

Google Sheets Trigger, Odoo, HTTP Request +1
Data & Sheets

This workflow acts as a junior finance research analyst for a UK boutique M&A or corporate finance team. It listens for Slack messages, classifies the request, gathers company or market data, and prod

HTTP Request, Google Drive, Google Docs +5
Data & Sheets

Teams that manage tasks in ClickUp and want those tasks reflected—and kept in sync—in Google Calendar automatically.

Google Calendar, Google Sheets, ClickUp Trigger +1
Data & Sheets

This workflow syncs Toggl Track time entries to Google Sheets and creates monthly tabs automatically.

HTTP Request, Google Sheets
Data & Sheets

This template demonstrates how to build a low-code, AI-powered data analysis workflow in n8n. It enables you to connect to various data sources (such as MySQL, Google Sheets, or local files), process

MySQL, Google Sheets, Read Write File +2