GTM Automation — ShiftOS / Holly
Clay → HeyReach → Smartlead, end to end
The automation stack only. No layers, no events, no partner channels — just the machine that takes a list of pharmacy ops leaders and turns them into booked demos on Samantha's calendar.
The stack
| Tool | Job | Cost |
|---|---|---|
| Clay | List building, enrichment, AI personalization | ~$349/mo |
| HeyReach | LinkedIn outbound | ~$79–200/mo per seat |
| Smartlead | Email outbound + warmup + reply routing | ~$94/mo |
| Google Workspace | Sending mailboxes on lookalike domains | $6/mailbox/mo |
All-in: ~$650/mo. One Holly deal pays for it for the year.
HeyReach and Smartlead both fire native webhooks straight to Slack incoming webhook URLs — no middleware needed.
Step 1 — Sender infrastructure (do this first, takes calendar time)
Cold email cannot go from @shiftos.com or @shiftrx.io. You'll burn the primary domain's reputation and break transactional/customer email. Use lookalike domains.
Buy 5 lookalikes
getshiftos.comtryshiftos.comshiftos.teammeetholly.aiholly-shiftos.com
Register through Cloudflare or Porkbun (cleaner DNS, cheaper than GoDaddy).
Set up Google Workspace on each
$6/user/mo. One mailbox per domain to start, two if you want more volume later. Use real human names: samantha@, noah@. Never info@, sales@, hello@ — those get filtered before they're read.
Set a forwarding rule on each mailbox → all replies forward to a shared replies@shiftos.com inbox so nothing gets lost.
Authenticate every domain (SPF / DKIM / DMARC)
For each lookalike, in DNS:
SPF — TXT at root:
- Host:
@ - Value:
v=spf1 include:_spf.google.com ~all - One SPF per domain only. If one exists, edit it instead of duplicating.
DKIM — generate inside Google first:
admin.google.com→ Apps → Google Workspace → Gmail → Authenticate email- Select the domain → Generate new record → 2048-bit
- Copy the host (
google._domainkey) and the longv=DKIM1; k=rsa; p=...value - Add as a TXT record in DNS, wait an hour
- Go back to that Google page and click Start authentication. Until you click that button, DKIM is configured but not active. This is the step everyone forgets.
DMARC — TXT record:
- Host:
_dmarc - Value:
v=DMARC1; p=none; rua=mailto:postmaster@shiftos.com - Start at
p=none(monitor mode). After 3 weeks of clean sending, tighten top=quarantine.
Verify each domain by sending to a personal Gmail → Show original → SPF, DKIM, DMARC all PASS. Then run through mail-tester.com — don't launch any domain that scores below 9/10.
Warm every mailbox in Smartlead
Connect all mailboxes to Smartlead. Turn on warmup the moment the mailbox exists. Settings:
- Ramp from 5 to 40 emails/day over 14 days
- 30% reply rate
- Weekday-only sending
- Minimum 14 days of warmup before any real cold email goes out
Keep warmup running at lower volume even after launch — it props up reputation indefinitely.
Steady-state sending capacity once warmed: ~30 emails/day per mailbox × 5 mailboxes = ~150 cold sends/day = ~750/week.
Step 2 — Clay (list + enrichment)
ICP filters
1Industry: Retail Pharmacy, LTC Pharmacy, Specialty Pharmacy,
2 Compounding, Surgery Centers, Urgent Care, DSOs
3Locations: 3–50 (under 3 = no budget, over 50 = procurement hell)
4Headcount: 50–1,000
5Geography: US only; prioritize CA, NY, IL, WA, MA (strict labor law = sharper pain)
6Tech signal: currently on When I Work, Deputy, Homebase, paper, or ExcelTitle filters
- Pharmacy Director / Director of Pharmacy / Pharmacy Operations Manager
- Director of Operations / COO / VP Operations
- DON / Chief Nursing Officer
- Scheduling Manager / Workforce Manager
- Owner / Principal (independents)
Skip HR generalists, recruiters, IT directors. They are not the buyer.
Target list size: 3,000 verified contacts. That's ~6 weeks of sending capacity.
Enrichment columns (the difference between 1% and 12% reply rate)
In every Clay table, add these columns before exporting:
- Verified email — Clay waterfall: Findymail → Datagma → ZeroBounce. Drop anything not Valid.
- LinkedIn URL — required for HeyReach.
- Number of locations — pulled from Google Maps API or website scrape.
- Recent news — funding, expansion, new locations (Clay's Google News integration).
- Current scheduling tool (if detectable) — turns into a "ripping out X" angle.
- One-sentence company description — Clay's Claude integration generates from the website.
- Glassdoor pain signal — Clay AI prompt scans recent Glassdoor reviews for "scheduling," "shifts," "called off," "short staffed." If hits, flag the lead as Tier 1.
- Personalized opener — Clay AI prompt that takes columns 3–7 and writes one sentence specific to that company. This is what gets injected into the message as
{{personalized_opener}}.
Example computed openers Clay should produce:
- "Saw Mercy Pharmacy just opened your fourth location in Sacramento — congrats."
- "Three of your techs mentioned short-staffing on Glassdoor in the last quarter — that's exactly what Holly was built for."
- "You've been on When I Work for ~3 years from what I can tell — most pharmacy ops leaders we talk to outgrow it around the 4-location mark."
The rule: if the first sentence could be sent to anyone else on the list, rewrite it.
Export
Push to HeyReach via Clay's native integration. Push to Smartlead via CSV (or via Clay's webhook → Smartlead API). Same lead in both, same week.
Step 3 — HeyReach (LinkedIn)
Sender setup
2 LinkedIn profiles minimum. Both need to look like operators, not marketers:
- Headline: "Helping pharmacy operators automate scheduling with Holly | ShiftOS"
- Pin one Holly demo video and one customer logo wall to Featured
- Recent activity in feed (Holly auto-poster — 2x/week, customer wins or short demo clips)
Connect both profiles via the HeyReach Chrome extension (sticky session, fewer flags).
Sending limits — DO NOT exceed
- Week 1: 15 connection requests/day per profile
- Week 2: 25/day
- Week 3+: 50/day, hard cap 100/day
A flagged profile is dead for 30+ days. Don't push past the limits to "test."
The sequence
1Day 0 → Connection request + note (<300 chars)
2 "Hi {first} — saw {personalized_trigger}. Building an AI
3 scheduler for pharmacy ops, would love to connect."
4
5Day 2 → If accepted: warm intro
6 "Thanks for connecting. Quick context — Holly handles
7 call-offs, PTO, swaps, and license tracking for multi-site
8 pharmacy ops. Open to a 15-min look?"
9
10Day 6 → If no reply: value drop
11 "Easier to show than tell — 90 sec of Holly handling a
12 shift swap: {video_link}"
13
14Day 11 → If no reply: peer proof
15 "We just helped {peer_company} cut 18 hrs/week of scheduling
16 work. Same setup as yours. Worth a quick look?"
17
18Day 17 → If no reply: breakup
19 "Last note from me — should I close the loop, or is there
20 a better time to circle back?"
21
22Day 30 → If no reply: warm touch (no message)
23 Profile view + post likeConfig that matters
- Sending hours: 9am–5pm in recipient timezone, weekdays only
- Random delays between actions: ON
- Skip on out-of-office detection: ON
- Stop on reply: ON
- Webhook on reply: native HeyReach webhook → Slack
#linkedin-replieschannel
Step 4 — Smartlead (Email)
Email runs in parallel against the same list, with a deliberate timing offset.
The orchestration rule
LinkedIn connection request fires Day 0. First email fires Day 2. By the time the email lands, the recipient has already seen the LinkedIn notification — open rate jumps 15–25%.
The sequence
1Day 2 → Email #1 — short, personalized, single CTA
2 Subject: "{first}, quick Q on {company}'s scheduling"
3 Body: 4 sentences. {personalized_opener} → problem →
4 one-line Holly pitch → ask for 15 min.
5
6Day 5 → Email #2 — peer proof
7 Subject: "how {peer_company} cut scheduling time 60%"
8 Body: 5 sentences. Case study + same CTA.
9
10Day 9 → Email #3 — concrete offer
11 Subject: "free schedule audit?"
12 Body: offer to run a free audit on their current workflow
13 and show where Holly saves time. Low-friction ask.
14
15Day 14 → Email #4 — breakup
16 Subject: "should I close the loop?"
17 Body: 2 sentences.
18
19Reply branch: pause sequence, route to SlackConfig that matters
- Volume: 30/day per mailbox, 5 mailboxes = 150/day
- Sending hours: 8am–5pm in recipient timezone (Smartlead supports this — turn it on)
- Stop on reply: ON, across all sequences for that lead
- Stop on auto-reply (OOO): ON, resume after 7 days
- Lead categories: ON (Smartlead auto-classifies into Interested / Not Interested / OOO / Wrong Person / DNC)
- Webhooks:
EMAIL_REPLYandLEAD_CATEGORY_UPDATED→ native Smartlead webhook → Slack#email-replies
Subject line rules
- Lowercase first letter (looks human, not blast)
- Questions beat statements
- Under 50 characters
- Use the company name when possible
- Never: "free," "guaranteed," "limited time," "act now," exclamation marks. Healthcare spam filters hammer these.
Step 5 — Cross-channel orchestration
Two channels, one list, same person. They have to coordinate or you look like a bot army.
Stop rule
A reply on either channel pauses both. The AE who responds in Slack also pauses the sibling sequence by hand as part of their reply SLA — open the other tool, find the lead, click pause. At 150/day volume this is ~30 seconds per reply and not worth automating yet. Build that automation when reply volume crosses ~20/day.
Dedupe rule
Match leads across channels on LinkedIn URL first, email second. Same person should never get sequenced twice — handle this in Clay before exporting (one master table, two export views).
Reply routing flow
11. Reply hits HeyReach or Smartlead
22. Native webhook fires → Slack incoming webhook URL
33. Slack #replies channel shows: name, company, channel,
4 full reply text, link to the lead in HeyReach/Smartlead
54. AE responds within 30 minutes during business hours
65. AE manually pauses the sibling sequence in the other toolSpeed-to-reply is the single biggest conversion lever. Going from 4-hour to 30-minute response roughly doubles meetings booked. This is the one SLA the team must hold.
The CTA
One Calendly link, 15-minute slots, M–F 9–4 in Samantha's timezone, 10-min buffers, Zoom auto-attached. SMS reminder 1 hour before. No phone — every intro is video.
Step 6 — Metrics (what "working" looks like)
Per 8-week cycle on a 3,000-account list:
| Metric | Bad | Target | Good |
|---|---|---|---|
| LinkedIn accept rate | <25% | 35–45% | >50% |
| LinkedIn reply rate (of accepts) | <8% | 12–18% | >20% |
| Email open rate | <40% | 55–65% | >70% |
| Email reply rate | <4% | 6–10% | >12% |
| Combined positive replies | <1% | 2–3% | >4% |
| Demos booked / positive replies | <40% | 60% | >75% |
| Demo show rate | <60% | 75% | >85% |
Funnel math at target: 3,000 leads → ~75 positive replies → ~45 demos booked → ~35 demos completed → ~12 pilots → ~6 closed deals per cycle.
Reading the numbers
- Accept rate low → LinkedIn profile or connection note is broken. Profile first.
- Opens fine, replies low → message body is generic. Sharper personalization in Clay.
- Opens low → deliverability. Run mxtoolbox + mail-tester, check warmup status.
- Demos no-showing → calendar friction. Cut to 15 min, add SMS reminders, send "looking forward" 1 hr before.
Weekly cadence
Monday — 30 min
- Pull last week's metrics from HeyReach + Smartlead
- Triage every reply still sitting in Slack
- Note the bottleneck stage, pick one fix to test this week
Wednesday — 30 min
- A/B review: kill worst variant, double best
- Spot-check Clay enrichment quality on the new batch
- Confirm warmup is still running on every mailbox
Friday — 15 min
- mail-tester.com on each sending domain
- Confirm no mailboxes throttled or blacklisted
- Push next week's lead batch from Clay → HeyReach + Smartlead
Total operator time once running: ~75 min/week.
Two-week launch plan
Week 1 — Infrastructure
- Mon: Buy 5 lookalike domains, start Google Workspace setup
- Tue: SPF/DKIM/DMARC on every domain, click "Start authentication" in Google Admin
- Wed: Connect all mailboxes to Smartlead, start warmup (14-day clock starts now)
- Thu: Clay account, build ICP filter, start enrichment on first 500 leads
- Fri: HeyReach account, connect 2 LinkedIn profiles, profile cleanup
Week 2 — Build
- Mon: Clay enrichment columns finalized, first 500 leads cleaned and verified
- Tue: HeyReach sequence skeleton built, first 100 leads imported
- Wed: Smartlead sequences built, same 100 leads imported
- Thu: Copy session — write all sequence copy with someone who knows the buyer
- Fri: Slack incoming webhook URLs created, plugged into HeyReach + Smartlead native webhook configs, internal test sends to team Gmail accounts, confirm replies surface in
#repliescorrectly
Week 3 — Soft launch
- Mon: First 50 leads enter LinkedIn sequence
- Wed: First 50 leads enter email sequence
- Fri: Review reply quality, deliverability, message tone. Adjust before scaling.
Week 4+ — Scale
- 100/day LinkedIn, 150/day email
- Weekly cadence kicks in
- First demos: end of Week 4. First closed deals: ~Week 10–12.