Sales & Marketing System

Trade Show Cold Email System

A predictable revenue engine — collecting exhibitor leads from trade shows, enriching contacts, and driving personalized outreach at scale.

V0.1 Current Version
9 Core Functions
1 / 10 Build Items Done
20% Overall Progress

System Building Progress

Tracked against the System Building Checklist — 10 Standard Items. Current version: V0.1

# Checklist Item Status Notes
1 Core Tools Chosen Done
2 System Flowchart with Core Functions Started
3 Core Functions Built Pending
4 Bug Test / Revision Pending
5 Security Check / Revision Pending
6 Version PR / Commit / GitHub Pending
7 Cloudflare / Google Publish Pending
8 overview.md Updated Started
9 Next Version Features Chosen Pending
10 Content Piece Created Pending

System Goals

Four pillars driving the design and operation of the cold email system.

Predictable Revenue

Generate consistent, trackable revenue through cold email with specific levers of control and improvement.

Automated & Low Cost

Reduce operational costs by automating as much as possible using Claude and other automation tools.

Easy to Use & Improve

Simple interfaces and clear documentation so the team can operate and iterate on the system quickly.

Clear Dashboards

Nice-looking, easy-to-understand dashboards to monitor performance and track improvement over time.

Core Tools

The technology stack powering the cold email system.

Google Sheets & Apps Script
Google Looker Studio
HubSpot CRM (V0.1) / BlueForest CRM (V1)
Apollo.io
Trigger.dev (V0.1 & V1)

Core Function Building Checklist

Prerequisites and tasks to build each of the 9 core functions for V0.1. Check off items as they are completed.

PREREQ Prerequisites
  • P1
    HubSpot Account & API Key — Create or confirm HubSpot account, generate a Private App API key with scopes for contacts, companies, and email
  • P2
    HubSpot Custom Properties — Create the 4 custom properties on both Company and Contact objects: BlueForest Segment ID, Exhibitor, Primary Trade Show, Region
  • P3
    Apollo.io Account & API Key — Sign up for Apollo.io Basic plan ($49/month, 5,000 credits/month), generate API key
  • P4
    Trigger.dev Project — Create a Trigger.dev project (Hobby plan ~$10–15/month), connect to GitHub repo, configure environment variables for HubSpot and Apollo API keys
  • P5
    Google Sheets Structure Finalized — Confirm column structure for all 3 sheets: "BlueForest Segments", "BlueForest Upcoming Trade Shows", "BlueForest Trade Show Contacts"
  • P6
    Google Apps Script Project — Create Apps Script project bound to the Cold Email folder, set up triggers for sheet events
  • P7
    Looker Studio Data Source — Connect the Cold Email Plan and Scorecard Google Sheet as a Looker Studio data source
STEP 1 Identify Target Trade Shows
  • 1.1
    Define the Google Sheet columns and validation rules for the "Upcoming Trade Shows" sheet (show name, dates, location, industry, website, status)
  • 1.2
    Build Apps Script function to mark a show as "PRIMARY" and propagate that flag
  • 1.3
    Test: manually add 3 trade shows, mark 2 as PRIMARY, verify data
STEP 2 Collect Exhibitor Lists
  • 2.1
    Define the Google Sheet columns for the "Trade Show Contacts" sheet (company name, website, exhibitor Y/N, trade show, source URL)
  • 2.2
    Build Apps Script function to filter and flag EXHIBITOR = Yes rows
  • 2.3
    Test: manually add 5 companies for a PRIMARY show, flag 3 as exhibitors, verify filter
STEP 3 Create Company Objects
  • 3.1
    Build Trigger.dev task: read qualifying exhibitors from Google Sheets → batch-create COMPANY objects in HubSpot with all custom properties
  • 3.2
    Add deduplication logic (match on company name + domain)
  • 3.3
    Add retry/error handling for HubSpot API rate limits
  • 3.4
    Test: run task against 3 test exhibitors, verify COMPANY objects appear in HubSpot with correct properties
STEP 4 Enrich & Create Contact Objects
  • 4.1
    Build Trigger.dev task: for each new COMPANY, call Apollo.io People Search API to find decision-maker contacts
  • 4.2
    Map Apollo.io response fields to HubSpot CONTACT properties (name, title, email, phone, company association)
  • 4.3
    Batch-create CONTACT objects in HubSpot and associate with parent COMPANY
  • 4.4
    Add retry/error handling for Apollo API failures and credit tracking
  • 4.5
    Test: enrich 3 test companies, verify CONTACTs created and associated in HubSpot
STEP 5 Assign BlueForest Segments
  • 5.1
    Build Trigger.dev task: read segment rules from "BlueForest Segments" sheet, apply BFS SEGMENT ID logic to each new CONTACT
  • 5.2
    Copy the 4 Company properties (Segment ID, Exhibitor, Primary Trade Show, Region) to the associated CONTACT via Apps Script formula or Trigger.dev
  • 5.3
    Create HubSpot Active Lists (dynamic segments) using the custom properties as filters
  • 5.4
    Test: assign segments to 3 test contacts, verify they appear in the correct HubSpot lists → CONTACT becomes a LEAD
STEP 6 Research & Write Email Copy
  • 6.1
    Define email research template (what info to gather per LEAD/COMPANY: industry, recent news, trade show context)
  • 6.2
    Create email copy templates (subject line formulas, body structure with merge fields)
  • 6.3
    Build research workflow: Claude reviews LEAD + COMPANY data and generates personalized subject + body drafts
  • 6.4
    Test: generate email copy for 3 test LEADs, review for quality and personalization
STEP 7 Set Up & Send Email Sequences
  • 7.1
    Create email sequence templates in HubSpot (initial email + follow-ups with timing rules)
  • 7.2
    Build Trigger.dev task: enroll LEADs into HubSpot sequences by BLUEFOREST SEGMENT
  • 7.3
    Configure tracking: sends, opens, clicks, replies, bounces writing back to HubSpot and to the Cold Email Plan & Scorecard sheet
  • 7.4
    Test: enroll 3 test LEADs in a sequence, verify emails send and tracking data flows to both HubSpot and Google Sheet
STEP 8 Dashboard & Reporting
  • 8.1
    Build Looker Studio dashboard: send volume, open rates, reply rates, bounce rates by segment and time period
  • 8.2
    Add revenue attribution view (deals linked to cold email LEADs)
  • 8.3
    Build Apps Script function to push daily summary metrics from the Scorecard sheet to Looker Studio
  • 8.4
    Test: verify dashboard populates with test sequence data
STEP 9 Weekly Review & Improvement
  • 9.1
    Build Trigger.dev cron job (weekly): scan HubSpot sequence performance data and Google Sheet metrics
  • 9.2
    Generate a weekly summary report: top/bottom segments, open rate trends, reply rate trends, suggested actions
  • 9.3
    Send the weekly report via email or post to a Google Doc
  • 9.4
    Test: trigger a manual run, verify report accuracy and delivery

Flow of Information

Nine steps from identifying trade shows to continuous improvement.

1 Identify Target Trade Shows

Research and add upcoming trade shows relevant to BlueForest's target industries to the Upcoming Trade Shows Google Sheet. Each qualifying show becomes a Primary Trade Show.

2 Collect Exhibitor Lists

For each Primary Trade Show, gather the list of exhibiting companies. Evaluate each company — qualifying exhibitors proceed to the next step.

3 Create Company Objects

Each qualifying exhibitor becomes a Company object in HubSpot (V0.1) / BlueForest CRM (V1) with company name, website, industry, trade show association, and region classification.

4 Enrich & Create Contact Objects

Using Apollo.io, enrich each Company to find decision-makers. A Trigger.dev task orchestrates this: querying Apollo's API, handling retries on failures, and batch-creating Contacts in HubSpot (V0.1) / BlueForest CRM (V1) — name, title, and email.

5 Assign BlueForest Segments

Assign one or more BFS Segment IDs based on industry, region, trade show, and other filters. At this point, the Contact becomes a Lead.

6 Research & Write Email Copy

Claude and the team research each Lead and Company to craft personalized email subject lines and body copy referencing the specific trade show, industry, and company details.

7 Set Up & Send Email Sequences

Create email sequences for each Lead or Segment. All activity — sends, opens, clicks, replies, bounces — is tracked in HubSpot (V0.1) / BlueForest CRM (V1) and Cold Email Plan & Scorecard.

8 Dashboard & Reporting

Key metrics flow into the Cold Email Dashboard (Looker Studio) — send volume, open rates, reply rates, and revenue attribution over time.

9 Weekly Review & Improvement

Claude scans all system documents and performance data weekly — adjusting segments, refining copy, identifying underperforming sequences, and suggesting new trade shows.

System Flowchart

How data flows from Google Sheets into HubSpot CRM — companies, contacts, and the properties that link them.

Google Workspace "Cold Email" Folder
"BlueForest Segments"
Google Sheet
"BlueForest Upcoming Trade Shows"
Google Sheet
BlueForest "Trade Show Contacts"
Google Sheet
Google Sheets Columns
Company
Contact
BlueForest Segment ID [###]
BlueForest Segment ID [###]
Exhibitor [Yes] or [No]
Exhibitor [Yes] or [No]
Primary Trade Show [Name of show]
Primary Trade Show [Name of show]
Region [Southeast] etc
Region [Southeast] etc
HubSpot CRM Properties
HubSpot CRM Objects
Company
Contact
BlueForest Segment ID [###]
BlueForest Segment ID [###]
Exhibitor [Yes] or [No]
Exhibitor [Yes] or [No]
Primary Trade Show [Name of show]
Primary Trade Show [Name of show]
Region [Southeast] etc
Region [Southeast] etc
BlueForest Segment = HubSpot Dynamic Segments
Picks up contacts dynamically based on our custom properties and other advanced formulas. A simple formula duplicates the 4 property values from each Company into the corresponding cells on the Contact worksheet.

Trigger.dev — Workflow Automation

Open-source TypeScript background job and workflow orchestration — multi-step tasks with retries, concurrency control, cron scheduling, and a monitoring dashboard.

V0.1 Hybrid Approach

Trigger.dev handles heavy orchestration where reliability matters; Apps Script handles Google-native tasks.

Step Handled By
3. Create Companies Trigger.dev
4. Enrich & Create Contacts Trigger.dev
5. Assign Segments Trigger.dev
7. Send Email Sequences Trigger.dev
9. Weekly Review Trigger.dev (cron)
1, 2, 8 Apps Script
6 Claude + Team
Auto retries Concurrency control Task dashboard Cron scheduling

Estimated cost: ~$10–15/month (Hobby plan)

V1 Full Pipeline Automation

Trigger.dev becomes the central orchestration engine, replacing Apps Script for most tasks and connecting to BlueForest CRM.

  • End-to-end pipeline: single multi-step workflow runs Steps 2–9
  • Direct BlueForest CRM API integration (replaces HubSpot)
  • Claude API integration for automated research & email copy (Step 6)
  • Real-time webhook triggers on new trade shows / exhibitors
  • Advanced error handling with dead-letter queues
Full orchestration Webhook triggers Dead-letter queues Claude API

Next Steps

Priority actions to advance the system from V0.1 toward a working first release.

  1. 1
    Finish the System Flowchart

    Complete the flowchart in Google Drawings, ensure all 9 core functions are visually mapped with data flow between tools.

  2. 2
    Build Core Functions (Item #3)

    This is the biggest block — implement the 9 core functions: exhibitor collection, CRM object creation, lead enrichment, segmentation, email copy generation, sequence setup, send/track, dashboard feed, and weekly review automation.

  3. 3
    Set Up HubSpot CRM (V0.1)

    Configure HubSpot Company and Contact objects, define segment filters (lists), and connect HubSpot to Google Sheets and the email sending pipeline. Plan migration path to BlueForest CRM for V1.

  4. 4
    Configure Apollo.io & Trigger.dev

    Set up Apollo.io Basic plan for lead enrichment (5,000 credits/month). Configure Trigger.dev for workflow orchestration — batch HubSpot operations, Apollo enrichment pipelines, email sequence triggers, and the weekly review cron job.

  5. 5
    Build the Cold Email Dashboard

    Create the Looker Studio dashboard that pulls from the Cold Email Plan & Scorecard — showing send volume, open rates, reply rates, and revenue attribution.

  6. 6
    Bug Test, Security Check & Publish

    Run through items #4–#7 on the checklist: test for bugs, verify security, commit to GitHub, and publish via Cloudflare/Google.

Key Definitions

Reference glossary for the terms used throughout this system.

  Contact & Lead

A Contact is an individual in the CRM linked to a Company. A Lead is a new Contact we can potentially email.

  Company & Exhibitor

A Company is a CRM object with full business info. An Exhibitor is a Company that regularly exhibits at trade shows.

  Segments & Regions

A BFS Segment is a filtered list for outreach, identified by a 3-digit ID. We use 13 world Regions for segmentation.

  Dashboard & Scorecard

The Cold Email Dashboard is a Looker Studio report. The Scorecard is the Google Sheet feeding it with send/open/reply data.