Zapier Automation: Automated Subcontractor Bid Solicitation Sequences

Tools:Zapier, Gmail or Outlook, Google Sheets
Time to build:2-3 hours
Difficulty:Intermediate-Advanced
Prerequisites:Comfortable using ChatGPT for writing bid emails. See Level 3 guide: "Build a Bid Workflow Assistant with ChatGPT Plus"
Zapier

What This Builds

An automated system that sends bid solicitation emails to your entire subcontractor list whenever you start a new project, triggered by a single row entry in a Google Sheet. When bid day approaches, a second automation fires reminder emails to non-responders. What used to take 2-4 hours of manual email writing and sending becomes a 5-minute setup process that runs itself.

Prerequisites

  • Zapier account (free plan works for basic automation; Zapier Starter at {{tool:Zapier.price}} needed for multi-step automations)
  • Gmail or Outlook email account you use for bid correspondence
  • Google Sheets (free) for your project and subcontractor tracking
  • A list of your regular subcontractors with email addresses
  • Basic comfort with spreadsheets

The Concept

Think of Zapier as an assembly line worker who watches your spreadsheet 24/7. The moment you add a new row (a new project), the worker automatically sends personalized emails to everyone on your subcontractor list for the relevant trades. Another worker watches a different trigger (bid date approaching) and sends follow-up emails to anyone who hasn't responded. You write the email templates once. The automation fills in the project details and sends them for you.


Build It Step by Step

Part 1: Set Up Your Spreadsheet Foundation

1. Create a Project Master Sheet in Google Sheets: Set up one sheet called "Projects" with these column headers:

  • A: Project ID (your internal number)
  • B: Project Name
  • C: Project Type (Office / Healthcare / Warehouse / etc.)
  • D: Project Location
  • E: Bid Due Date
  • F: Bid Due Time
  • G: Where to Get Drawings (link or description)
  • H: Contact Name
  • I: Contact Email
  • J: Scope Description (2-3 sentences about the project)
  • K: Email Sent? (leave blank; Zapier will write here)

2. Create a Subcontractor List Sheet: Create a second sheet called "Subcontractors" with:

  • A: Sub Company Name
  • B: Contact Name
  • C: Email Address
  • D: Trade (Mechanical / Electrical / Concrete / Drywall / etc.)
  • E: Active? (Yes/No)

Fill this in with your regular subcontractors.

Part 2: Write Your Email Template

3. Draft your solicitation email template: Use ChatGPT to create a professional template with merge field placeholders. The placeholders will be filled in by Zapier.

Your template might look like:

Copy and paste this
Subject: Bid Invitation – {{Project Name}} – Due {{Bid Due Date}} {{Bid Due Time}}

Dear {{Sub Contact Name}},

We are pleased to invite you to bid the {{Trade}} scope on {{Project Name}}, a {{Project Type}} project located in {{Project Location}}.

Bid Due: {{Bid Due Date}} at {{Bid Due Time}}

Project Scope:
{{Scope Description}}

Drawings and specifications are available at: {{Where to Get Drawings}}

Please confirm receipt of this invitation and let us know if you plan to submit a proposal. Questions can be directed to {{Your Contact Name}} at [your email].

We appreciate your partnership and look forward to your proposal.

[Your company name and signature]

Save this template. You'll enter it into Zapier in the next step.

Part 3: Build the Zapier Automation

4. Log into Zapier: Go to zapier.com and log in (or create a free account).

5. Create a new Zap. Trigger: New row in Google Sheets:

  1. Click Create Zap (or + New Zap)
  2. Search for Google Sheets as the Trigger app
  3. Select trigger event: New Spreadsheet Row
  4. Connect your Google account and select your Projects spreadsheet
  5. Select the "Projects" sheet/tab
  6. Click Test trigger. Zapier will pull the most recent row to confirm it's connected

6. Add a Filter step (only run when Email Sent is blank):

  1. Click + to add a step, search for Filter by Zapier
  2. Set condition: Column K (Email Sent?) Does not exist or Is empty
  3. This prevents re-sending emails if you edit an existing project row

7. Add a Lookup step to find matching subs by trade: This is where it gets more advanced. For a simplified version, skip the automatic trade matching and use one of these approaches instead:

  • Simple approach: Create separate Projects sheets by trade (one for Mechanical, one for Electrical, etc.) and run separate Zaps for each
  • Advanced approach: Use a Zapier lookup table or Google Sheets QUERY formula to pull matching subs

For the simple approach:

  1. Add a Gmail (or Outlook) action step
  2. Set To: as your subcontractor email address (you'll need one Zap per sub, or use a different approach below)

8. The practical shortcut: Gmail BCC to a trade group: The most practical setup for most estimators:

  1. Create a Gmail group (or distribution list in Outlook) for each major trade: mechanical@yourdomain.com, electrical@yourdomain.com, etc.
  2. Add all subs for each trade to the respective group
  3. In your Zap, send the solicitation email TO each trade group address
  4. The group distributes to all subs automatically

This means you maintain your sub lists in Gmail/Outlook groups rather than Zapier, which is simpler to manage.

9. Configure the Gmail action:

  1. Add Gmail as the action app
  2. Select Send Email
  3. Connect your Gmail account
  4. Map the fields:
    • To: Enter your Mechanical trade group email (or individual sub email)
    • Subject: Click the merge icon and select your Project Name and Date columns
    • Body: Paste your email template; click merge icons to insert column data in each placeholder location

10. Add a "Mark as sent" step:

  1. Add another Google Sheets action
  2. Select Update Spreadsheet Row
  3. Set Column K (Email Sent?) to "Yes" and today's date
  4. This prevents duplicate sends

11. Test the Zap:

  1. Add a test project row in your Projects sheet
  2. Run the Zap manually and confirm the email sends correctly
  3. Check that the merge fields populated correctly (Project Name, Date, etc.)
  4. Turn the Zap on

Part 4: Build the Follow-Up Reminder Automation

12. Create a second Zap for follow-up reminders: This Zap runs on a schedule (daily) and sends reminders when bid day is approaching.

  1. Create a new Zap
  2. Trigger: Schedule by Zapier → every day at 7:00 AM
  3. Add Google Sheets → Find Rows. Look for rows where Bid Due Date is 3 days from today and Email Sent is "Yes" but Response Received is blank
  4. Action: Gmail → Send reminder email to the relevant trade groups

This requires more complex date logic. For a simpler approach, use Zapier's built-in date functions or the Google Sheets QUERY function to pre-calculate a "Send Reminder Date" column (Bid Date minus 3 days) and trigger on matches to that column.


Real Example: Office Building Bid

Setup: Estimator adds a new row to the Projects sheet for "Riverside Corporate Center," a 45,000 SF office building with a bid due March 31st.

Trigger: Zapier detects the new row at 8:00 AM.

Automation runs: At 8:05 AM, bid invitation emails go out to all 23 subcontractors across 6 trade groups (mechanical, electrical, concrete, drywall/framing, glazing, roofing). Each email has the project name, bid date, scope description, and drawings link auto-filled from the spreadsheet row.

Time saved: 45 minutes of individual email writing and sending → 5 minutes to fill in the spreadsheet row.

Follow-up: 3 days before bid day (March 28th), a second automation sends reminders to all trade groups: "Bid Reminder: Riverside Corporate Center. Your quote is due Monday March 31st at 2:00 PM."


What to Do When It Breaks

  • Emails not sending → Check Zapier's "Task History." It shows exactly which step failed and why. Common cause: Gmail connection expired and needs re-authorization.
  • Merge fields showing as blank → The column mapping in Zapier may be off. Go back into the Zap editor and re-map the fields manually
  • Sending duplicate emails → Check that the "Email Sent?" filter step is working correctly; you may need to clear old test data from the sheet
  • Zapier doesn't detect new rows → Make sure you're adding truly new rows, not editing existing ones; Zapier only triggers on net-new rows

Variations

  • Simpler version: Skip the automation entirely and just use a Gmail template (Drafts → Save as template) with placeholders you update manually. This saves 60% of the time with 10% of the setup effort
  • Extended version: Connect to BuildingConnected's API (if available) to automatically pull your active sub list from your existing BD platform

What to Do Next

  • This week: Build the basic spreadsheet structure and write your email template
  • This month: Launch the first Zap for one trade (mechanical) and test it on a real bid
  • Advanced: Add a response tracking column and build a "non-responders" follow-up Zap that targets only subs who haven't confirmed

Advanced guide for Construction Cost Estimator professionals. Zapier subscription may be required for multi-step automations. Tool interfaces may change. Visit zapier.com for current documentation.