Create HubSpot contacts from Google Forms using Zapier: upsert by email, map fields, set lifecycle stage, and notify Slack for qualified leads.
Introduction
You get Google Forms responses by email or in a sheet, then someone creates the HubSpot contact manually. That copy-paste step costs time and produces duplicates when the same person submits twice. You need a single, reliable pipeline so every valid submission becomes a HubSpot contact the moment it arrives.
In this short guide you will build a Zapier zap that watches new Google Forms responses, upserts a contact in HubSpot using email as the dedupe key, maps the useful fields (name, company, phone, message), and sends a Slack alert only when the submission meets your qualification rule. By the end you will have a working, low-noise intake flow you can test and turn on in minutes.
What you will know by the end: the exact Zap trigger, HubSpot action to use, field mappings, and the simple qualification filter for Slack notifications.
What You'll Need
- Google Forms with responses going to a linked Google Sheet (free)
- HubSpot account with permissions to create and update contacts (API access not required for Zapier's built-in HubSpot app)
- Zapier account (free tier works for low volume, paid tier recommended for multi-step Zaps and filters)
- Slack workspace and a channel for notifications (optional)
Prerequisites and notes: Zapier needs access to your Google account, HubSpot user with API write permissions via the Zapier connection, and a Slack bot authorised to post into the target channel. If you expect many submissions, use a paid Zapier plan to avoid rate limits.
How It Works (The Logic)
Trigger: new row in the Google Sheet that stores Google Forms responses. Zapier reads that row, normalises the email, then either:
- Uses the HubSpot "Find Contact" action by email; if found, runs the "Update Contact" action; if not, runs the "Create Contact" action. This is an upsert pattern.
- After the upsert, Zapier applies a filter: if the submission meets your qualification rules (for example "Interest = Pricing" or "Budget > X"), Zapier posts a concise Slack message to your sales channel.
In plain steps: Google Forms → Google Sheets new row trigger → Find Contact by email → Create or Update Contact → Optional Slack notify.
Step-by-Step Setup
- Prepare your Google Form and response sheet
- Link the form to a Google Sheet under Responses → Create spreadsheet.
- Make the email field required on the form, or include at least one contact point you can use later for manual review.
- Keep field names consistent and simple: Timestamp, Email, First name, Last name, Company, Phone, Interest, Message.
Gotcha: if the email is optional you will need a manual review path. For reliable dedupe use email as the primary key.
- In Zapier create a new Zap and add the Google Sheets trigger
- Trigger app: Google Sheets
- Event: New Spreadsheet Row (choose the sheet the form writes to)
- Connect your Google account and select the Spreadsheet and Worksheet. Pull in a sample row to map fields.
Tip: set the trigger to the exact worksheet the Form writes into, not the entire spreadsheet, to avoid picking up header rows or other tabs.
- Normalise the email (optional but recommended)
- Add an Action: Formatter by Zapier → Text → Lowercase. Map the Email column into this step.
- Use the output field in later HubSpot find/upsert steps.
Why: HubSpot find by email is case-insensitive usually, but normalising prevents logic errors in your Zap and makes logs cleaner.
- Add HubSpot: Find Contact by Email
- Action app: HubSpot
- Event: Find Contact
- Set the search field to Email and map the Formatter output (the normalised email)
- Important: enable the option that lets the step continue if no contact is found. Zapier will then give you the choice to add subsequent Create Contact action in the same Zap.
Common gotcha: if you select a HubSpot find step that fails the Zap when there is no match, the flow stops. Make sure the find action is configured to continue on no-result.
- Add the conditional Create or Update actions (Upsert)
-
Add an Action: HubSpot → Create Contact. Map fields:
- Email → normalised email
- First name → Google Sheet First name
- Last name → Google Sheet Last name
- Company → Company
- Phone → Phone
- Any custom HubSpot properties you use, map them here
-
Add another Action in a different path: HubSpot → Update Contact. Map the same fields, but set it to use the Contact ID returned by the Find Contact step.
Implementing the conditional paths in Zapier:
- Use a Paths step (if you have Zapier's paid plan) or use the inbuilt conditional mapping where the Create runs only when the Find returned no contact and the Update runs only when the Find returned a contact id.
Mapping tip: only map non-empty fields into HubSpot to avoid overwriting richer CRM values with blanks. Zapier allows you to insert fields conditionally or use Lookup Table style logic.
- Add a simple qualification filter for Slack notifications
-
After the successful create/update, add a Filter step (or a Path) that checks whether this submission should notify the team. Example rule:
- Continue only if Interest equals "Request pricing" OR Message contains "budget" OR Company contains "Inc" (whatever you need).
-
Keep the rule simple. You can expand later with multiple conditions.
- Post a Slack message for qualified leads
- Action: Slack → Send Channel Message
- Channel: select your sales channel
- Message template example:
- New qualified lead: {{First name}} {{Last name}}
- Email: {{Email}}
- Company: {{Company}}
- Interest: {{Interest}}
- HubSpot: include the contact URL if you can construct it from portal details or include the HubSpot Contact ID returned by the Create/Update step
Gotcha: Zapier’s HubSpot actions return the contact ID. Constructing a direct HubSpot URL requires your portal ID. If you prefer not to expose portal details in the Zap, include the contact ID and tell recipients how to open it in HubSpot.
- Add a fallback path for missing email or manual review
- If the Email field is empty, use a Path that writes the row into a "Needs review" Google Sheet tab or posts to a private ops Slack channel with the form row link.
- Keep that path lightweight so ops can triage quickly.
- Test the full Zap end-to-end
- Submit a real test response via the Google Form with a valid email and test interest value that triggers Slack.
- Confirm: a contact is created in HubSpot (or updated if the email already exists), and Slack receives the message.
- Test a second submission with the same email to confirm the Update path runs and does not create a duplicate contact.
- Turn the Zap on and monitor the first day
- Watch Zapier task history for any errors.
- Spot-check several HubSpot contacts to ensure fields map correctly and optional blanks did not overwrite good data.
Real-World Business Scenario
A small B2B consultancy used this exact Zap to handle inbound event signups. Before the Zap they waited for a staff member to create contacts in HubSpot, which moved response time into hours. With the Zap in place every submission created or updated a contact automatically and the sales Slack channel only received a notification when the signup marked interest in paid services. The team reduced lead handling time and removed duplicate contacts created during manual entry.
Common Variations
- Use Zapier Paths to route different Google Forms (for example demo request vs partner enquiry) into different HubSpot pipelines or Slack channels.
- Add a Gmail action to send an automated acknowledgement email to the submitter before you create the contact.
- Replace the HubSpot upsert with a small middleware step (Airtable or Google Sheets) if you prefer to batch or validate submissions before writing to CRM.
Where this fits in your stack
This Zapier pattern is ideal when you want a quick production-ready intake flow without building a Make.com scenario. If you already use Typeform or need richer dedupe and idempotency patterns, see our Make.com guide How to Connect Typeform to HubSpot and Auto-Create New Leads Using Make.com or our Typeform + HubSpot + Slack walkthrough How to Automate Typeform to HubSpot and Slack with Make.com.
If you want this wired and hardened for your team, Olmec Dynamics builds these automations end to end and helps tune dedupe rules, Slack routing, and HubSpot property mappings. See what we do at https://olmecdynamics.com