Files
Michael e1f364f010 feat: Tier B operator scaffolding — bundle, copy SoT, posts, emails
Pick up and finish yesterday's cut-off Tier B pass.

- build/: PyInstaller scaffold (datatools.spec + launcher.py +
  hook-streamlit.py + README) — folder-mode bundle, locked
  127.0.0.1, per-OS recipe
- marketing/COPY.md: single source of truth for every customer-facing
  string — landing H1/sub/CTAs, demo CTAs, email subjects, Gumroad
  listing, banned phrases
- marketing/community-posts/: 9 drafts (3 posts × 3 niches:
  bookkeeper, revops, shopify-pet) — story / tip / soft-offer
- marketing/emails/: 18 drafts (Gumroad delivery + 5-touch
  onboarding × 3 niches), per-niche segmentation guidance
- docs/NEXT-STEPS.md: flip 2.2 / 2.4 / 3.1 / 3.4 to done with
  pointers to the new assets; add Phase 0 inventory rows
- .gitignore: narrow `build/` ignore so PyInstaller spec + launcher
  + hooks get tracked, only generated artifacts (build/build/,
  build/__pycache__/, build/dist/) stay ignored

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 14:04:37 +00:00

1.8 KiB

RevOps · Day 7 — Run it before every HubSpot import

Subject: Run it before every HubSpot import Send: Day 7 Goal: reframe from one-off tool to per-campaign workflow


Hi {{first_name}},

A week in. By now you've probably run DataTools on a real list once or twice and confirmed the dedupe catches more than HubSpot's native check.

The thing that turns DataTools into a per-month-cost saver instead of a one-off purchase: make it the gate on every import.

The pattern that works:

1. One DataTools run per campaign source. Webform pull → DataTools. LinkedIn scrape → DataTools. Apollo export → DataTools. Each run produces a "clean" CSV.

2. Concatenate the cleaned CSVs. Standard pandas concat or just paste in Excel.

3. One more DataTools run on the concatenation. This is the cross-source dedupe pass — the one that catches the same person across the three sources.

4. Compare against your current HubSpot export. DataTools' dedupe against your existing CRM as the second source catches the people you already paid for last quarter and don't need to import again.

5. Import only the residue — the rows that survived all four passes — into HubSpot.

The buyers running this pipeline tell me they've cut their HubSpot marketing-contact bill 15-25% within two months. Not because their pipeline got smaller — because they stopped paying for duplicates.

One thing to set up once: save your dedupe settings as a .datatools-preset.json and commit it to your RevOps team's repo (or a shared Drive folder). Same preset every campaign means consistent results across whoever's running it that week.

If you want, reply with a sanitized lead list and I'll suggest a starting preset for your sources — happy to do this for the first 50 buyers.

— Michael {{support_email}}