Lead capture workflow

Facebook Lead Ads to Google Sheets and Email Without Zapier

Use n8n to collect each new Meta instant-form lead, write a clean record to Google Sheets, and notify the right person by email without adding Zapier to the stack.

Salon owner reviewing a Facebook lead workflow that adds a Google Sheets row and sends an email notification

The practical no-Zapier path is a four-node n8n workflow: Facebook Lead Ads Trigger → Edit Fields → Google Sheets → Gmail. A new instant-form submission starts the workflow. n8n normalizes the fields, appends or updates one row using the Meta lead ID, then sends an internal email alert with a link to the sheet.

Short answer: this workflow replaces manual CSV downloads and copy-paste. It does not replace Ads Manager, consent language, lead ownership rules, or a proper CRM when several people need assignment, audit history, and pipeline reporting.

Check Meta's direct Google Sheets option first

Some Meta Business Suite accounts now show a direct Google Sheets connection under All tools → Instant forms → CRM setup → Google Sheets. If it appears in your account and your only requirement is to place each new form submission in one spreadsheet, try that route first. It is simpler than creating a Meta developer app and does not require a separate automation-platform subscription.

What the business needs Best starting point
Send one instant form to one Google Sheet Meta's direct Google Sheets connection, when available
Rename fields, filter leads, prevent duplicate rows, and send an email n8n
Update several tools, route leads by answers, or add approval and error handling n8n, or n8n connected to a CRM
Assign owners, track a sales pipeline, and keep a complete activity history A proper CRM, with n8n handling the surrounding automation when needed

Meta rolls out and changes Business Suite features by account and region, so the Google Sheets choice may not be visible everywhere. This guide covers the n8n route because the workflow does more than copy a lead: it normalizes the data, uses the lead ID for safer writes, and sends an internal notification. The four required steps use built-in n8n nodes, so the basic workflow does not need a custom HTTP Request node.

What this workflow should do

Stage Node Output
Capture Facebook Lead Ads Trigger The lead ID, form and ad context, submission time, and submitted fields
Normalize Edit Fields Stable names such as lead_id, full_name, email, and phone
Store Google Sheets One row per lead, keyed by lead_id
Notify Gmail or Send Email An internal alert with the useful lead fields and a sheet link

Keep the email internal at first. An automatic message to the prospect is a separate business decision because the form must clearly support that use, the address must be valid, and local privacy and marketing-consent rules still apply.

Prerequisites for the n8n route

n8n's current Facebook Lead Ads credential uses OAuth2. You copy the OAuth Redirect URL from n8n into the Meta app, then add the Meta App ID and App Secret to the n8n credential. For production, n8n's official setup also calls for a Privacy Policy URL, Live app mode, advanced access for the requested feature, and business verification where Meta requires it.

Meta permissions and leads access

Meta's current lead-retrieval documentation separates access by the data you request. For complete lead and ad-level data it lists leads_retrieval, pages_show_list, pages_read_engagement, pages_manage_ads, and ads_management. Webhook setup also uses pages_manage_metadata. The token must come from someone with the required Page and advertising access.

Leads Access Manager can narrow who or which integration can retrieve leads. A person being able to view the Page does not automatically prove that the app can fetch every lead. When the trigger connects but no real data arrives, check business asset access and lead access before rebuilding the workflow.

Build the workflow in n8n

1. Configure Facebook Lead Ads Trigger

  1. Add Facebook Lead Ads Trigger and create its OAuth2 credential.
  2. In Meta for Developers, add the n8n OAuth Redirect URL to the allowed redirect URIs.
  3. Enter the Meta App ID and App Secret in n8n, then complete the Facebook authorization.
  4. Select the Page and form that should start this workflow.
  5. Run a test with Meta's Lead Ads Testing Tool and inspect the actual output before mapping fields.

Do not test against a live production app casually. n8n documents that Facebook Lead Ads allows one webhook per app. Switching between test and production overwrites the registered webhook URL. If a live workflow must be tested, plan a short controlled window, unpublish it, test, then publish it again and verify a fresh production lead.

2. Normalize the lead fields

Add an Edit Fields node after the trigger. Use the test execution to map the fields actually returned by your form. Meta forms can use custom question names, and their answers may arrive inside a field-data collection rather than as the exact column names you want.

Use a small stable record:

lead_id
created_time
full_name
email
phone
form_id
ad_id
campaign_id
source
status
owner

Store the Meta lead ID even if nobody sees it day to day. It gives the next node a durable key for a basic duplicate check and makes support investigations much easier than matching by name or email alone.

3. Write to Google Sheets without duplicate rows

Create the header row in Google Sheets first, then add the Google Sheets node. Choose Sheet Within Document → Append or Update Row, select the spreadsheet and tab, and match on lead_id. n8n also offers Append Row, but the append-or-update operation is safer when a delivery or execution is retried.

Map each normalized field to one column. Keep computed formulas and team notes in separate columns so a later field-map change does not overwrite them. A lightweight sheet can start with status = New and a blank owner, but it should not pretend to be a full CRM forever.

If several forms or channels feed the same CRM, a source lead ID is not enough to recognize the same person across systems. Use the broader n8n lead deduplication pattern to normalize identity keys, route conflicts, and update the right contact.

4. Send the internal email after the row succeeds

Put the Gmail or Send Email node after Google Sheets. This order matters: the team should not receive a success alert for a lead that failed to save. A concise internal message can include the name, email, phone, form source, submission time, and a link to the shared sheet.

Subject: New Facebook lead: {{ full_name }}

Name: {{ full_name }}
Email: {{ email }}
Phone: {{ phone }}
Form: {{ form_id }}
Lead ID: {{ lead_id }}

Open lead sheet: https://docs.google.com/spreadsheets/d/...

The placeholders above describe the message shape. Insert them through n8n's expression picker from your normalized node instead of pasting names that do not exist in your execution.

Test the path before publishing

  1. Create one test lead with a recognizable test name and a safe email address.
  2. Confirm the trigger execution contains the expected Page, form, lead ID, and question values.
  3. Confirm one row appears under the correct headers.
  4. Run the same normalized item again and confirm it updates the existing lead_id row instead of adding another row.
  5. Confirm the internal email arrives only after the sheet operation succeeds.
  6. Publish the workflow and create a separate production test lead.
  7. Record who owns Meta access, Google access, and the alert mailbox so the integration is maintainable.

Common failures and the fastest checks

Symptom Check first
The trigger connects but receives no real leads Live app mode, Page selection, form selection, Leads Access Manager, and required Meta permissions
Testing works, production does not Whether the test webhook replaced the production webhook, then republish and retest
Production works, testing does not The same single-webhook limitation and whether the workflow is still published
Names or answers land in the wrong columns The real test payload, custom form question names, and Edit Fields mapping
One lead creates several rows Use Append or Update Row with lead_id, then inspect execution retries
The sheet saves but no email arrives Email credential, sender permissions, recipient address, provider quota, and spam folder
Meta OAuth suddenly fails App status, business verification, changed permissions, removed business integration, or expired access

Privacy and operating rules

If your intake already starts with Google Forms rather than Meta instant forms, the simpler Google Forms, Sheets, and Gmail workflow may be enough. This guide is specifically for retrieving leads submitted inside Facebook or Instagram lead ads and routing them through n8n.

Sources checked

n8n Cloud for small teams

Try the workflow without maintaining a server

n8n Cloud is the simplest place to build and test this workflow if you do not want to manage hosting. I may earn a commission if you sign up through this link, at no extra cost to you.

Try n8n Cloud

Need the lead path mapped?

Send the form fields, Page and account setup, spreadsheet columns, notification owner, and expected response time. I will help scope a workflow with clear access, duplicate, and failure handling.

Map the workflow