AutomationFlowsData & Sheets › Create a Master Cv Google Sheet From Uploaded Cvs with Easybits

Create a Master Cv Google Sheet From Uploaded Cvs with Easybits

ByFelix @easybits on n8n.io

Upload your CV as a PDF and instantly get a structured "Master CV" Google Sheet – every experience, education entry, skill, and contact detail extracted into the right tab. This gives you a clean personal CV database you can reuse across other workflows (job tailoring,…

Event trigger★★★★☆ complexity19 nodesForm TriggerGoogle Sheets@Easybits/N8N Nodes ExtractorForm
Data & Sheets Trigger: Event Nodes: 19 Complexity: ★★★★☆ Added:

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

This workflow follows the Form → Form Trigger 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": "CV Tailor Onboarding (powered by easybits)",
  "tags": [],
  "nodes": [
    {
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        16,
        0
      ],
      "parameters": {
        "options": {},
        "formTitle": "Import my CV",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "CV file",
              "requiredField": true,
              "acceptFileTypes": ".pdf, .png, .jpg, .jpeg"
            }
          ]
        },
        "formDescription": "Upload your CV (PDF). I'll extract your experience, education, skills, and summary into your Master CV sheet."
      },
      "typeVersion": 2.5
    },
    {
      "name": "Split: Experiences",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        928,
        -208
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "experienceRows"
      },
      "typeVersion": 1
    },
    {
      "name": "Append: Experiences",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1232,
        -208
      ],
      "parameters": {
        "columns": {
          "value": {
            "role": "={{ $json.role }}",
            "dates": "={{ $json.dates }}",
            "skills": "={{ $json.skills }}",
            "bullets": "={{ $json.bullets }}",
            "company": "={{ $json.company }}"
          },
          "schema": [
            {
              "id": "role",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "dates",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "dates",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "bullets",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "bullets",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "skills",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "skills",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1L9Jx4MR-A0DskhZfhHB62GwtSVX2A0y1o8k_rn5F1AY/edit#gid=0",
          "cachedResultName": "Master CV"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "REPLACE_WITH_YOUR_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/REPLACE_WITH_YOUR_SHEET_ID/edit",
          "cachedResultName": "Master CV"
        }
      },
      "typeVersion": 4.7
    },
    {
      "name": "Split: Education",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        928,
        0
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "educationRows"
      },
      "typeVersion": 1
    },
    {
      "name": "Append: Education",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1232,
        0
      ],
      "parameters": {
        "columns": {
          "value": {
            "dates": "={{ $json.dates }}",
            "degree": "={{ $json.degree }}",
            "details": "={{ $json.details }}",
            "institution": "={{ $json.institution }}"
          },
          "schema": [
            {
              "id": "degree",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "degree",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "institution",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "institution",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "dates",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "dates",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "details",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "details",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 727698800,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1L9Jx4MR-A0DskhZfhHB62GwtSVX2A0y1o8k_rn5F1AY/edit#gid=727698800",
          "cachedResultName": "Education"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "REPLACE_WITH_YOUR_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/REPLACE_WITH_YOUR_SHEET_ID/edit",
          "cachedResultName": "Master CV"
        }
      },
      "typeVersion": 4.7
    },
    {
      "name": "Split: Skills",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        928,
        192
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "skillRows"
      },
      "typeVersion": 1
    },
    {
      "name": "Append: Skills",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1232,
        192
      ],
      "parameters": {
        "columns": {
          "value": {
            "skill": "={{ $json.skill }}"
          },
          "schema": [
            {
              "id": "skill",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "skill",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "skill"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1842653005,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1L9Jx4MR-A0DskhZfhHB62GwtSVX2A0y1o8k_rn5F1AY/edit#gid=1842653005",
          "cachedResultName": "Skills"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "REPLACE_WITH_YOUR_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/REPLACE_WITH_YOUR_SHEET_ID/edit",
          "cachedResultName": "Master CV"
        }
      },
      "typeVersion": 4.7
    },
    {
      "name": "Append: Summary",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1232,
        384
      ],
      "parameters": {
        "columns": {
          "value": {
            "email": "={{ $json.summaryRow.email }}",
            "links": "={{ $json.summaryRow.links }}",
            "summary": "={{ $json.summaryRow.summary }}",
            "location": "={{ $json.summaryRow.location }}",
            "full_name": "={{ $json.summaryRow.full_name }}",
            "languages": "={{ $json.summaryRow.languages }}",
            "linkedin_url": "={{ $json.summaryRow.linkedin_url }}"
          },
          "schema": [
            {
              "id": "full_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "full_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "linkedin_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "linkedin_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "languages",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "languages",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "links",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "links",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 585954066,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1L9Jx4MR-A0DskhZfhHB62GwtSVX2A0y1o8k_rn5F1AY/edit#gid=585954066",
          "cachedResultName": "Summary"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "REPLACE_WITH_YOUR_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/REPLACE_WITH_YOUR_SHEET_ID/edit",
          "cachedResultName": "Master CV"
        }
      },
      "typeVersion": 4.7
    },
    {
      "name": "Fan-out",
      "type": "n8n-nodes-base.code",
      "position": [
        624,
        0
      ],
      "parameters": {
        "jsCode": "const cv = $input.first().json.data;\n\nfunction toArray(value) {\n  if (Array.isArray(value)) return value;\n  if (typeof value === 'string') {\n    try {\n      const parsed = JSON.parse(value);\n      return Array.isArray(parsed) ? parsed : [];\n    } catch (e) {\n      return [];\n    }\n  }\n  return [];\n}\n\nconst experiences = toArray(cv.experiences);\nconst education = toArray(cv.education);\nconst skills = toArray(cv.skills);\nconst languages = toArray(cv.languages);\nconst links = toArray(cv.links);\n\nconst experienceRows = experiences.map(exp => ({\n  role: exp.role || '',\n  company: exp.company || '',\n  dates: exp.dates || '',\n  bullets: Array.isArray(exp.bullets) ? exp.bullets.join(' | ') : (exp.bullets || ''),\n  skills: Array.isArray(exp.skills) ? exp.skills.join(', ') : (exp.skills || '')\n}));\n\nconst educationRows = education.map(ed => ({\n  degree: ed.degree || '',\n  institution: ed.institution || '',\n  dates: ed.dates || '',\n  details: ed.details || ''\n}));\n\nconst skillRows = skills.map(s => ({ skill: typeof s === 'string' ? s : (s.skill || s.name || '') }));\n\nconst summaryRow = {\n  full_name: cv.full_name || '',\n  email: cv.email || '',\n  linkedin_url: cv.linkedin_url || '',\n  location: cv.location || '',\n  summary: cv.summary || '',\n  languages: languages.map(l => `${l.language || ''} (${l.proficiency || ''})`).join(', '),\n  links: links.map(l => `${l.label || ''}: ${l.url || ''}`).join(' | ')\n};\n\nreturn [{\n  json: {\n    experienceRows,\n    educationRows,\n    skillRows,\n    summaryRow,\n    counts: {\n      experiences: experienceRows.length,\n      education: educationRows.length,\n      skills: skillRows.length\n    }\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "name": "easybits: Extract CV",
      "type": "@easybits/n8n-nodes-extractor.easybitsExtractor",
      "position": [
        320,
        0
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "name": "Wait for All Branches",
      "type": "n8n-nodes-base.merge",
      "position": [
        1552,
        -16
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition",
        "numberInputs": 4
      },
      "typeVersion": 3.2
    },
    {
      "name": "Show Completion Screen",
      "type": "n8n-nodes-base.form",
      "position": [
        1760,
        16
      ],
      "parameters": {
        "options": {},
        "operation": "completion",
        "completionTitle": "\u2705 Your CV has been imported!",
        "completionMessage": "=<p>Imported:</p>\n</br></br>\n<ul>\n  <li>{{ $('Fan-out').first().json.counts.experiences }} work experiences</li>\n  <li>{{ $('Fan-out').first().json.counts.education }} education entries</li>\n  <li>{{ $('Fan-out').first().json.counts.skills }} skills</li>\n</ul>\n</br></br>\n<p>Open your Master CV sheet and review the imported data before running the tailor workflow.</p>"
      },
      "typeVersion": 2.5
    },
    {
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -720,
        -1024
      ],
      "parameters": {
        "width": 624,
        "height": 2112,
        "content": "# \ud83d\udcc4 CV Onboarding\n(powered by easybits)\n\n## What This Workflow Does\nUpload your CV as a PDF and instantly get a structured \"Master CV\" Google Sheet \u2013 every experience, education entry, skill, and contact detail extracted into the right tab. This gives you a clean personal CV database you can reuse across other workflows (job tailoring, application tracking, skills gap analysis).\n\n## How It Works\n1. **Upload** \u2013 Drop your CV PDF into the n8n web form\n2. **Extract** \u2013 easybits Extractor pulls structured data (experiences, education, skills, summary)\n3. **Fan out** \u2013 A Code node splits the response into rows for each sheet tab\n4. **Append** \u2013 Four parallel branches write to the four tabs of your Master CV sheet\n5. **Done** \u2013 A completion screen confirms what was imported\n\n## Setup Guide\n\n### 1. Prepare Your Master CV Google Sheet\nCreate a Google Sheet named **Master CV** with four tabs:\n- **Master CV** \u2013 columns: `role`, `company`, `dates`, `bullets`, `skills`\n- **Education** \u2013 columns: `degree`, `institution`, `dates`, `details`\n- **Skills** \u2013 single column: `skill`\n- **Summary** \u2013 columns: `full_name`, `email`, `linkedin_url`, `location`, `summary`, `languages`, `links`\n\nLeave all tabs empty below the headers \u2014 the workflow fills them.\n\n### 2. Install & Connect the easybits Extractor\nThe easybits Extractor is a verified n8n community node. On **n8n Cloud** it's available out of the box. On **self-hosted n8n**, install it via Settings \u2192 Community Nodes \u2192 enter `@easybits/n8n-nodes-extractor`.\n\nSign up for a free account at [easybits.tech](https://easybits.tech) to get an API key. Open the **easybits: Extract CV** node in this workflow and connect your credential.\n\n### 3. Configure the Extraction Pipeline\nThe Extractor node uses 10 fields to pull structured data from the CV. Paste each description into the corresponding field's description box in the Extractor node:\n\n**`full_name`** *(string)*\nCandidate's full name as it appears at the top of the CV. Null if not present.\n\n**`email`** *(string)*\nEmail address. Null if not present.\n\n**`linkedin_url`** *(string)*\nFull LinkedIn profile URL. Null if not present.\n\n**`location`** *(string)*\nLocation as written (e.g., \"Berlin, Germany\"). Null if not present.\n\n**`summary`** *(string)*\nPersonal summary or \"about me\" paragraph. Return full text as written, do not paraphrase. Null if no summary section.\n\n**`experiences`** *(array)*\nEach work experience as an object: `role`, `company`, `dates` (range as written), `bullets` (array, one per bullet point), `skills` (array of techs/tools used in this specific role). Preserve original wording of bullets \u2014 do not summarize. List in CV order.\n\n**`education`** *(array)*\nEach entry as an object: `degree`, `institution`, `dates`, `details` (thesis, GPA, honors \u2014 null if none). Empty array if no education section.\n\n**`skills`** *(array)*\nFlat list of all technical skills, tools, frameworks, methodologies, AND certifications listed anywhere in the CV. Each as a short noun phrase. Deduplicate case-insensitively. Exclude soft skills like \"communication\".\n\n**`languages`** *(array)*\nSpoken/written languages as objects: `language`, `proficiency` (as written, e.g., \"C1\", \"fluent\"). Empty array if none.\n\n**`links`** *(array)*\nProfessional URLs other than LinkedIn (GitHub, portfolio, personal site) as objects: `label`, `url`. Empty array if none. Do not include LinkedIn here.\n\nThe 10-field cap matches the easybits free plan, so anyone can run this workflow as-is.\n\n### 4. Connect Google Sheets\nOpen each of the four append nodes (Master CV, Education, Skills, Summary) and connect your Google Sheets credential. Replace the placeholder document ID with your Master CV sheet's ID.\n\n### 5. Activate & Upload\nSet the workflow to active, copy the form URL, and upload your CV. Review the four tabs after \u2013 minor cleanup is normal, especially for two-column or designer CV layouts.\n\n## \ud83d\udd27 Note on the Fan-out Code Node\nThe easybits Extractor wraps its response in a `data` object, so the Fan-out node reads from `$input.first().json.data`. The `toArray()` helper inside the node also handles cases where array fields come back as JSON-encoded strings \u2013 making the workflow robust across different Extractor response shapes."
      },
      "typeVersion": 1
    },
    {
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 400,
        "content": "## \ud83d\udce5 CV Upload\nHosts a web form with a single file upload field for the CV (PDF, PNG, JPEG). The uploaded file is passed as binary directly to the Extractor."
      },
      "typeVersion": 1
    },
    {
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 400,
        "content": "## \ud83e\udd16 easybits Extract CV\nSends the uploaded file to the easybits Extractor with 10 fields configured: full_name, email, linkedin_url, location, summary, experiences, education, skills, languages, and links. Returns structured JSON wrapped in a `data` object."
      },
      "typeVersion": 1
    },
    {
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        528,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 400,
        "content": "## \ud83d\udd00 Fan-out CV Data\nReads the Extractor response from `json.data`, defensively parses any stringified arrays, and splits the data into four output shapes: experienceRows, educationRows, skillRows, and a single summaryRow. Also computes counts for the completion screen."
      },
      "typeVersion": 1
    },
    {
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        832,
        -416
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 768,
        "content": "## \u2702\ufe0f Split Out Items\nThree parallel splitters fan the array fields out into individual items so each row can be appended to its sheet tab independently. Summary doesn't need splitting \u2013 it's already a single row."
      },
      "typeVersion": 1
    },
    {
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        -416
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 960,
        "content": "## \ud83d\udcdd Append to Sheets\nFour parallel branches write to the four tabs of your Master CV sheet. Each runs independently, so a slow tab doesn't block the others."
      },
      "typeVersion": 1
    },
    {
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1440,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 512,
        "height": 448,
        "content": "## \u2705 Completion Screen\nWaits for all four append branches to finish (via the Merge node), then displays a custom HTML completion page with the import counts so the user knows what landed."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "connections": {
    "Fan-out": {
      "main": [
        [
          {
            "node": "Split: Education",
            "type": "main",
            "index": 0
          },
          {
            "node": "Split: Experiences",
            "type": "main",
            "index": 0
          },
          {
            "node": "Split: Skills",
            "type": "main",
            "index": 0
          },
          {
            "node": "Append: Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split: Skills": {
      "main": [
        [
          {
            "node": "Append: Skills",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append: Skills": {
      "main": [
        [
          {
            "node": "Wait for All Branches",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Append: Summary": {
      "main": [
        [
          {
            "node": "Wait for All Branches",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "Split: Education": {
      "main": [
        [
          {
            "node": "Append: Education",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append: Education": {
      "main": [
        [
          {
            "node": "Wait for All Branches",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "easybits: Extract CV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split: Experiences": {
      "main": [
        [
          {
            "node": "Append: Experiences",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append: Experiences": {
      "main": [
        [
          {
            "node": "Wait for All Branches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "easybits: Extract CV": {
      "main": [
        [
          {
            "node": "Fan-out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for All Branches": {
      "main": [
        [
          {
            "node": "Show Completion Screen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

Upload your CV as a PDF and instantly get a structured "Master CV" Google Sheet – every experience, education entry, skill, and contact detail extracted into the right tab. This gives you a clean personal CV database you can reuse across other workflows (job tailoring,…

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

Splitout Code. Uses splitOut, httpRequest, googleSheets, stickyNote. Event-driven trigger; 36 nodes.

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

This n8n workflow is designed for Customer Success Managers (CSM), marketers, sales teams, and data administrators who need to automate the process of uploading and processing CSV data in HubSpot. It

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

This template implements a professional Double Opt-In email verification system using Google Sheets as a database. The workflow collects user emails, generates unique verification codes, stores them s

Form Trigger, Form, Email Send +1
Data & Sheets

This automation streamlines the process of collecting user information using a Form Node, enabling individuals to join a waitlist managed via Google Sheets.

Google Sheets, Email Send, Form +2
Data & Sheets

This workflow turns contract process into a fully automated, production-ready signing pipeline.

Form Trigger, Google Sheets, Form +3