# Automate meeting scheduling from HubSpot form submissions **Author:** dheer-gupta **Date:** 2026-02-08 **Category:** Integrations **Tags:** HubSpot, Zapier, Meeting Scheduling, Lead Recovery, Sales Automation, CRM Integration, Workflow Automation Connect HubSpot forms to SkipUp via Zapier to recover leads who submit but don't book. Step-by-step for both Zapier and HubSpot workflow paths. > A step-by-step integration tutorial for connecting HubSpot forms to SkipUp via Zapier to recover leads who submit forms but do not book meetings. Covers two implementation paths: a full Zapier workflow (for HubSpot Starter/Free) and a hybrid HubSpot workflow plus Zapier path (for HubSpot Professional/Enterprise). Includes HubSpot-specific trigger configuration for form submissions, delay timing recommendations by form type (15-30 min for demo requests, 30-60 min for contact forms, 10-15 min for pricing forms), filter logic using HubSpot contact properties (Last booked meeting date, lifecycle stage), edge case handling for contact merges and form re-submissions, and a testing checklist. Prerequisites: HubSpot account with forms, Zapier account, SkipUp account with API key. Web version: https://blog.skipup.ai/automate-meeting-scheduling-hubspot-form-submissions --- HubSpot forms capture intent, but many submissions never convert to booked meetings. If your team tracks form fills and calendar bookings separately, the gap between them is where pipeline disappears. This guide shows you how to automate meeting scheduling from HubSpot form submissions — building a recovery workflow that detects leads who submitted but did not book and triggers SkipUp to schedule the meeting automatically. > **Quick Start:** > - **What this covers:** A HubSpot-specific workflow to recover leads who submit forms but don't book meetings. > - **Two paths:** Full Zapier (any HubSpot plan) or Hybrid with HubSpot Workflows (Professional+). > - **Setup time:** 30-45 minutes (Zapier path) or 15-20 minutes (Hybrid path). > - **Prerequisites:** HubSpot with forms, Zapier account, SkipUp account with API key. > - **Using Salesforce instead?** See [Salesforce Lead Follow-Up Automation](/salesforce-lead-follow-up-automation-recover-prospects). > - For the CRM-agnostic version of this playbook, see [How to Recover Leads Who Didn't Book a Meeting](/how-to-recover-leads-who-didnt-book-meeting). ## What do you need to set up HubSpot meeting recovery? Before you begin, confirm you have everything on this checklist: - [ ] **HubSpot account** with at least one active form - [ ] **Zapier account** (Starter or higher for multi-step Zaps) - [ ] **SkipUp account** with an API key (Settings > API Keys) - [ ] **Calendar connected** in SkipUp (Google Calendar or Outlook) Already connected HubSpot to Zapier and SkipUp? Skip to the next section. For basic Zapier + SkipUp connection and authentication, see our [Zapier setup guide](/automate-meeting-scheduling-with-zapier). For HubSpot-specific connection steps, see [support.skipup.ai/integrations/zapier-hubspot](https://support.skipup.ai/integrations/zapier-hubspot). This guide assumes those connections are in place and focuses on the recovery detection logic. ## Should you use Zapier or HubSpot workflows for detection? There are two ways to build this recovery workflow. The right choice depends on your HubSpot plan. | | **Path A: Full Zapier** | **Path B: Hybrid (HubSpot + Zapier)** | |---|---|---| | **Detection logic** | Zapier handles trigger, delay, and filter | HubSpot workflow handles trigger, delay, and filter | | **SkipUp action** | Zapier "Create Meeting Request" | Zapier webhook triggered by HubSpot workflow | | **HubSpot plan required** | Any plan with forms | Marketing Hub Professional or Enterprise | | **Zapier complexity** | 4-5 steps (all logic in Zapier) | 1-2 steps (SkipUp action only) | | **Best for** | Teams on HubSpot Starter or Free | Teams on HubSpot Professional or Enterprise | **Path A** keeps everything in Zapier — simpler to manage if you're already comfortable with Zapier. **Path B** uses HubSpot's native workflow engine for detection, which means fewer Zapier steps and tighter integration with your HubSpot data. This guide covers both paths. Follow Path A or Path B based on your HubSpot plan, or read both to decide. > **How the tools divide the work:** HubSpot captures the form submission and stores contact data. Zapier (or HubSpot Workflows) orchestrates the detection logic — trigger, delay, and filter. SkipUp handles the scheduling conversation — outreach email, time negotiation, and calendar booking. Each tool does one job well. ## How do you trigger the workflow from a HubSpot form? ### Path A: Zapier trigger 1. In Zapier, click **Create Zap** and search for **HubSpot** as the trigger app. 2. Select **New Form Submission** as the trigger event. 3. Choose the specific form you want to monitor — for example, your demo request form. Do not select "Any form" unless you want recovery to run for every form on your site. 4. Test the trigger to pull in a sample submission. Verify these fields come through: email, firstname, lastname, company, and the form submission timestamp. **Tip:** Create separate Zaps for different form types. A demo request form and a general contact form have different intent levels and should use different delay windows. ### Path B: HubSpot workflow trigger 1. In HubSpot, go to **Automation > Workflows** and create a new contact-based workflow. 2. Set the enrollment trigger to: **Contact has filled out [your form name] on any page**. 3. Add an enrollment filter to exclude internal submissions: **Contact email does not contain [your company domain]**. 4. Under re-enrollment settings, decide whether a contact should re-enter the workflow on subsequent form submissions. For most teams, allow re-enrollment — a lead who submits a second form after a long gap may need recovery again. ## How long should you wait before checking for a meeting? The delay window is the most important configuration in this workflow. Too short and you trigger recovery for leads still clicking through to your scheduling link. Too long and the prospect has moved on. ### Recommended delays by HubSpot form type | HubSpot Form | Recommended Delay | Why | |---|---|---| | **Demo request** | 15-30 minutes | High intent — they book immediately or they don't | | **Contact Us** | 30-60 minutes | Mixed intent — the lead may be comparing options | | **Pricing page form** | 10-15 minutes | Highest intent — active evaluation means rapid decisions | **Note:** Zapier polling intervals on Starter plans are approximately 15 minutes. If you configure a delay shorter than your polling interval, the actual delay may be longer than expected. This mainly affects the pricing page form recommendation (10-15 minutes). On Professional Zapier plans, polling runs every 2 minutes. ### Path A: Delay in Zapier After the trigger step, add a **Delay by Zapier** action. Select **Delay For**, then set the value (e.g., 20 minutes). The Zap pauses for the specified time before proceeding. ### Path B: Delay in HubSpot In your HubSpot workflow, add a **Delay** action after the enrollment trigger. Select **Delay for a set amount of time** and enter your delay window (e.g., 20 minutes). HubSpot's workflow delay is precise and integrated with your contact timeline. ## How do you check if the lead already booked in HubSpot? This is the section that matters most. The filter logic determines whether recovery fires correctly — catching leads who didn't book while leaving alone those who did. This HubSpot-specific detection pattern is not covered in our support docs or the [CRM-agnostic playbook](/how-to-recover-leads-who-didnt-book-meeting). SkipUp does not read HubSpot data directly — all contact data reaches SkipUp through the Zapier action step. ### Path A: Zapier filter using HubSpot data **Step 1: Look up the contact in HubSpot.** Add a **HubSpot: Get Contact** action. Search by the email address from the trigger step. This retrieves the contact's current properties including meeting activity. **Step 2: Check for a meeting record.** Look at the **Last booked meeting date** contact property (`hs_last_booked_meeting_date`). You need to determine: was a meeting booked AFTER the form was submitted? - If **Last booked meeting date** exists and is after the form submission timestamp → the lead booked. **Stop the Zap.** - If **Last booked meeting date** is empty or is before the form submission → the lead didn't book. **Continue to recovery.** **Step 3: Add the filter.** Add a **Filter by Zapier** step: - Only continue if: **Last booked meeting date** does not exist. This is the simplest and most reliable filter configuration. For additional precision, you can add a second Filter by Zapier step that checks whether **Last booked meeting date** is before the form submission timestamp — this handles the edge case where a meeting from a previous interaction exists but was booked before this form submission. However, for most teams, the "does not exist" check is sufficient. **Alternative approach:** Use **HubSpot: Search CRM** to look for Meeting engagement records associated with the contact. This catches meetings logged by reps manually, not just those from scheduling tools. To configure: set the object type to "Engagements," filter by engagement type "Meeting" and the contact's email, then check if any results were returned after the form submission timestamp. ### Path B: HubSpot workflow filter After the delay, add an **If/Then branch** in your HubSpot workflow: 1. **Condition:** Contact property **Last booked meeting date** (`hs_last_booked_meeting_date`) is known AND is after [enrollment date]. 2. **YES branch** (meeting was booked): End the workflow. No recovery needed. 3. **NO branch** (no meeting found): Continue to the SkipUp action. For additional precision, add a second condition to your NO branch: **Lifecycle Stage** is not equal to **Customer**. This prevents recovery outreach to leads who converted through a different channel during the delay window. ### HubSpot-specific edge cases **Contact merges during delay.** If two HubSpot contacts merge while the workflow is running, the surviving contact inherits the meeting activity. Your filter catches this correctly as long as you look up by email — the email resolves to the surviving contact record. **Form re-submissions.** HubSpot creates a new form submission event but does not create a new contact record. The filter checks the existing contact's meeting activity, which is the correct behavior. The edge case to watch: if the contact already had a meeting from a previous submission, the filter will stop recovery even though this new submission hasn't been addressed. If this matters for your workflow, compare the **Last booked meeting date** specifically against the current form submission timestamp, not just whether it exists. **Lifecycle stage changes during delay.** A lead who submits a form and then converts to Customer through another channel (e.g., their colleague completes a purchase) should not receive a recovery email. Add a lifecycle stage filter after the delay to catch this. In Path B, this is a second If/Then condition. In Path A, add another Filter by Zapier step checking that **Lifecycle Stage** is not "Customer." ## How do you connect SkipUp to recover the lead? Your filter has confirmed no meeting was booked. The final step creates a SkipUp meeting request that triggers the recovery outreach. When this step fires, SkipUp takes over the scheduling conversation — emailing the prospect, negotiating a time, and booking the meeting. ### Path A: SkipUp action in Zapier Add **SkipUp** as an action step with **Create Meeting Request**. Map these fields from your HubSpot trigger data: | SkipUp Field | HubSpot Source | Example | |---|---|---| | **Participant email** | Email from form submission | prospect@company.com | | **Subject** | "Demo Call with" + Company | "Demo Call with Acme Corp" | | **Duration** | Static value | 30 minutes | | **Context** | Firstname + Company + Form name | "Jane Smith from Acme Corp submitted a demo request form" | | **Scheduling window** | Static value | 5 business days | Include the HubSpot form name and any custom form fields (e.g., team size, use case) in the context field. SkipUp uses this context to write a more relevant scheduling email. ### Path B: Webhook to Zapier 1. In Zapier, create a new Zap with **Webhooks by Zapier** as the trigger. Select **Catch Hook**. Zapier generates a unique webhook URL — copy this URL. 2. In HubSpot, return to your workflow. In the NO branch of your If/Then action, add a **Send a webhook** action. Set the method to **POST** and paste the Zapier webhook URL you copied in step 1. 3. Back in Zapier, test the trigger to confirm HubSpot data arrives. Add the **SkipUp: Create Meeting Request** action and map the fields from the webhook payload. ### Optional: Track recovery in HubSpot Add a Zapier step after the SkipUp action to update the HubSpot contact: - Set a custom contact property like **Recovery Triggered** to "Yes" and **Recovery Triggered Date** to the current timestamp. - This lets you filter and report on recovered leads in HubSpot without requiring SkipUp to write to your CRM. Note: This CRM update is a separate Zapier step writing back to HubSpot. SkipUp handles the scheduling conversation — it does not update CRM records directly. ## How do you test your HubSpot recovery workflow? Before going live, run through this checklist: - [ ] Submit a test form using a non-company email address - [ ] Verify the Zap triggers (Path A) or HubSpot workflow enrolls the contact (Path B) - [ ] Verify the delay fires for the correct duration - [ ] Verify the filter stops when a meeting record exists for the contact - [ ] Verify the filter continues when no meeting record exists - [ ] Verify the SkipUp meeting request is created with the correct contact data - [ ] Verify the prospect receives a scheduling email from SkipUp - [ ] If using the CRM tracking step, verify the contact property updates in HubSpot ### HubSpot-specific troubleshooting **"Zap triggers for every form, not just the one I selected."** In the HubSpot trigger step, confirm you selected a specific form — not "Any form." If you need recovery for multiple forms with different delays, create separate Zaps for each. **"Filter always passes even when a meeting was booked."** Date comparison is the most common issue. Confirm you are comparing the **Last booked meeting date** (`hs_last_booked_meeting_date`) against the form submission timestamp, and that both are in the same timezone format. **"HubSpot workflow doesn't enroll the contact."** Check enrollment criteria and re-enrollment settings. HubSpot workflows do not re-enroll contacts by default — you need to explicitly enable re-enrollment if the same contact submits the form again. **"Recovery fires but no scheduling email goes out."** Check your SkipUp API key permissions. Verify the meeting host's calendar is connected in SkipUp. Confirm the participant email is a valid external address (not an internal test email that SkipUp may skip). ## What should you do after setup? Your HubSpot recovery workflow is live. Here is what comes next: 1. **Monitor for two weeks** before adjusting delay windows or filter logic. Let the data accumulate. 2. **Check your recovery rate** against benchmarks — see [Form Submission to Meeting Booking: The Drop-Off Rates Every Sales Team Should Know](/form-submission-to-meeting-booking-drop-off-rates) for reference. 3. **Understand the speed-to-lead context** for why automated recovery outperforms manual follow-up: [Speed to Lead: Why Automated Meeting Scheduling is Your Best Response Time Weapon](/speed-to-lead-meeting-scheduling-automation). 4. **Scale to more forms** once your first workflow proves out. Replicate the Zap for each form type, adjusting delay windows per the table above. 5. **Close the loop in HubSpot** after meetings are booked. SkipUp fires webhooks on booking events. Create a separate Zap triggered by SkipUp's "Meeting Booked" webhook to update HubSpot contact properties (e.g., deal stage, lifecycle stage) when a recovered lead books. As with the recovery tracking step, this CRM update runs through Zapier. 6. **Review the complete strategy** for the full detection-to-recovery pipeline: [The Complete Guide to Abandoned Form Lead Recovery](/abandoned-form-lead-recovery). > **Using Salesforce instead?** See [Salesforce Lead Follow-Up Automation: Recover Prospects Who Don't Book Meetings](/salesforce-lead-follow-up-automation-recover-prospects) for the Salesforce-specific version of this guide. Start with your highest-volume HubSpot form. Set the delay, build the filter, connect SkipUp, and recover the leads your team has been losing between form and meeting.