Network26 Lead Tracker
How this CRM works
Not a generic spreadsheet with email bolted on — a purpose-built outreach engine for Network26: find local businesses, score email posture with DMARC, organize multi-folder campaigns, run a disciplined 3-touch sequence (manually or with paced Auto Send), and never lose the next follow-up.
What makes this CRM special
Built for outbound IT sales: discover real businesses on a map, filter for ones worth emailing, send branded campaigns with one click (or pace the whole day’s follow-ups with Auto Send), auto-advance status and calendar, and let recipients update preferences without you hunting through inboxes. Everything stays in one place — pipeline, map, campaign folders, Auto Send, and send — protected by Cloudflare when you need it, public only where it must be.
Find → filter → import → email → follow up → track. Repeat without the chaos.
Discover on a live map
Search Google Places by category and location (zip, city, address, county). Pan the map, search the visible area, or draw a custom region. Results stream in with phone, website, and category — ready to import in one tap.
Live DMARC intelligence
Look up each domain’s DMARC TXT record via DNS (Cloudflare DoH). See if they have
no record, p=none, quarantine, or reject — so you prioritize domains
that are easier to reach and skip hardened targets when you want.
Smart import & dedupe
Import one business or bulk-import everything visible. The CRM recognizes duplicates by Google Place ID, or by company plus phone, email, address, or website — so you don’t create double leads.
Disqualify without clutter
Not a fit from Discover? One-click disqualify sets status, stamps a note, and keeps them out of future Discover results and the active pipeline — while still reviewable later.
Campaign folders
Email Campaign stores shared folders on the server (e.g. DMARC Campaign). Expand a folder to edit its emails. Add more folders or more emails as you grow — no dangerous “reset everything” button.
3-touch campaign machine
Open Campaign on a lead: the right template is pre-selected (grouped by folder). On send, Graph delivers from your shared mailbox, status advances, last contact updates, and the next follow-up date uses business-day + mid-week logic.
Auto Send (due + optional New)
One tab to pace today’s due follow-ups, optional New first-touch (email, no follow-up date), and optional overdue: pick a campaign folder, start, then watch a live status log while delays + jitter keep sends human. Daily send cap: 50 (shared). Pause, resume, or stop anytime.
Send Audit
See how many campaign emails went out — any day or range, by campaign folder and template,
with a daily bar chart (count on each bar) and exportable send log. Built from the same
Campaign sent notes as the pipeline tile.
Load-balanced follow-ups
2nd and 3rd presets skip weekends, prefer Tue–Thu, and cap ~50 leads per day (same number as the Auto Send send ceiling) so calendar load matches mailbox volume. Overflow walks to the next open weekday.
Contact preferences (not “unsubscribe”)
Every campaign can include a signed “update your contact preferences” link — wording chosen to avoid spam-filter tripwires. One confirm → status Opt Out, note logged, out of active outreach. Works even when the CRM is behind Zero Trust (public bypass on those paths only).
Dashboard that drives action
Qualified lead count, emails sent today, meetings, upcoming and overdue follow-ups — click tiles to expand lists with quick actions (copy email, campaign, calendar, notes, edit).
Mobile-first pipeline cards
On phones: clean cards with company, contact, status, last contact, follow-up, campaign and edit — no endless horizontal scroll through notes. Desktop keeps the full power table.
Safe CSV round-trips
Export the filtered view with Ids, edit offline, re-import to update only. Blank cells leave fields alone; notes append with timestamps instead of wiping history.
1. Architecture overview
A modern, serverless stack — no heavy CRM license, no desktop app. Everything runs in the browser against Cloudflare and Microsoft 365.
- Frontend: static HTML/JS on Cloudflare Pages (fast, cacheable, Zero Trust ready)
- Leads API: Cloudflare Worker for create / read / update / delete
- Email send: Microsoft Graph as a shared mailbox (professional From address)
- Templates: Cloudflare KV — shared across every device that uses the CRM
- Discover: Google Places (nearby search, details, geocode)
- DMARC: live DNS TXT lookups via Cloudflare DNS-over-HTTPS
2. Main views
| View | Purpose |
|---|---|
| Lead Pipeline | Command center: search, filters, statuses, dates, notes, campaign send, stats tiles, CSV. |
| Discover Leads | Map + Places prospecting. Import, bulk import, DMARC bulk check, disqualify, hide noise. |
| Email Campaign | Author campaign folders and the emails inside them (merge fields). Stored on the server for every device. |
| Auto Send | Paced bulk send scoped to one audience track (folder’s linked pool or override). Due follow-ups + optional first-touch on that track only — other pools never mix. Same 3-touch rules as Campaign. |
| Recycle | Restart parked No Response leads into New or a custom campaign pool. Optionally create a linked Email Campaign folder so Auto Send stays isolated. Two-confirm bulk recycle. |
| Audit | Send volume history from Campaign sent notes — day/range presets, campaign + template filters, daily bar chart (count on each bar), send log, CSV export. |
3. Lead statuses
Statuses drive sorting, filters, Discover visibility, and campaign automation.
Active pipeline (default “Active” view)
New, custom campaign pool statuses, Contacted, 2nd Contact, Responded, Meeting Scheduled, Proposal Sent — and anything not in the inactive list.
Inactive (out of active pipeline & qualified count)
| Status | Meaning |
|---|---|
| Closed Won | Won business — celebrate, then archive from active work. |
| No Response | Parked / no meaningful reply. |
| Denied Service | Not a fit or declined service. |
| Disqualified | You (or Discover) said not a fit. Hidden in Discover. |
| Opt Out | They used the contact-preferences link (or manual). Locked status (not a casual dropdown), follow-up cleared, campaign send blocked by email. Same filters as Disqualified. Unlock requires two confirmations + audit note. |
After the third touch, leads move to No Response (inactive; follow-up cleared). The former 3rd Contact status has been removed; any leftover records remap to No Response on load.
Campaign pool statuses: New plus any custom pools you create on the Recycle tab (e.g. DMARC Campaign 2). These stay in the active pipeline and start the 3-touch sequence at Initial. Each lead also stores a campaign_pool track so after Contacted / 2nd Contact they still belong to the same campaign for Auto Send filtering.
Recycle tab: Pick any source status (No Response, Denied Service, etc. — not Opt Out), then move those leads onto a destination track (New or a custom pool for a new campaign). Two confirms. Optionally create a linked Email Campaign folder with the pool. Status + campaign track update; follow-up clears; audit note appended.
4. Lead pipeline
- Power search — company, contact, email, phone, address, notes, website in one box.
- Filters — status, industry, DMARC strength; chips for Active / All / no email / has email; New only, follow-up today, no contact in 30 days.
- Recycle tab — restart No Response leads into New or a custom campaign pool (two confirms).
- Inline everything — change status, last contact, and next follow-up without a full page edit.
- Notes with history — timestamped entries; latest preview on desktop; full modal when you need the whole story.
- One-click copy — company, contact name, email from lists and rows.
- Aging colors — rows tint by last-contact age so stale leads jump out visually.
- Dashboard tiles — Qualified Leads, Emails Sent today, Meetings, Upcoming, Overdue; expand lists with pagination and quick actions.
5. Follow-up calendar logic
Quick presets 2nd and 3rd (plus Today for last contact) encode Network26’s outreach rhythm — not random “+3 days” math.
| Preset | Rule |
|---|---|
| 2nd | ~3 business days from today (Mon–Fri), then snap toward Tue / Wed / Thu if the raw date is Mon/Fri/weekend. |
| 3rd | ~4 business days after the resolved 2nd date (chained), same weekday snap. |
Day cap (load balancing)
Cap of 50 leads with the same next_followup day when applying presets
(aligned with the Auto Send daily send ceiling).
If full, walk forward Mon–Fri until capacity opens. Mid-week preferred; Mon/Fri as overflow; never weekends.
Existing leads are not reshuffled — only the new pick moves.
Campaign send and Auto Send use this same engine so calendar and email stay in lockstep.
6. Email campaign folders & 3-touch sequence
Templates live on the server (KV) as campaign folders, each containing one or more emails. Default starter: DMARC Campaign with Initial / 2nd / 3rd. Add more folders (e.g. a second product line) and more emails inside them as you grow.
Folders & editing
- Folders start collapsed — click to expand and edit name, subjects, and bodies.
- Add campaign folder — creates a folder pre-filled with a full 3-touch sequence: Initial Outreach, 2nd Follow-up, 3rd Follow-up (names Auto Send already understands). Edit subjects/bodies, then Save templates.
- Add email — appends another blank email in that folder. Changes stay local until you click Save templates.
- Delete folder or Delete email requires two confirms. Still click Save to persist on the server.
- There is no “Reset defaults” — remove folders/emails deliberately instead of wiping everything.
- Merge fields:
{{first_name}},{{contact_name}},{{company}},{{email}},{{domain}},{{website}}.{{domain}}is the bare hostname (from website, else business email). - Send from a lead’s Campaign button (or Auto Send) — Graph delivers as the shared Network26 mailbox.
Automated sequence
Sequence matching prefers the selected folder (Auto Send) or the first folder for manual/quick defaults, then falls back by name/id heuristics (Initial / 2nd / 3rd).
| Status when sending | Default template | After successful send |
|---|---|---|
| New (touch 1 of 3) | Initial Outreach (or folder match) | → Contacted; last contact today; next follow-up = 2nd preset |
| Contacted (touch 2 of 3) | 2nd Follow-up | → 2nd Contact; last contact today; next follow-up = 3rd preset |
| 2nd Contact (touch 3 of 3) | 3rd Follow-up | → No Response; last contact today; clear next follow-up |
| Any other status | Manual pick (templates grouped by folder) | Note + last contact only |
- Modal loads a merged template into editable subject and body — tweak this send only (does not change the saved template).
- Modal shows a live preview of lead changes before send. Success closes with no popup; failures alert.
- Progression follows status, not which template you selected.
- Failed Graph send = no status/date/note update.
- Note logged:
Campaign sent (Template) [Folder] → email@…with today’s date (feeds “Emails sent today” and the Audit tab). Older notes without[Folder]still count. - Green quick send on the pipeline: one click, default sequence template, no edit modal.
7. Auto Send
Auto Send is the paced bulk runner for the day’s due follow-ups, with optional New first-touch and overdue. Same Graph send path and 3-touch lead updates as Campaign — with delays between emails so the mailbox doesn’t look like a blast.
Who gets queued
- Leads with
next_followup= today (always in scope when due). - Optional scope toggles (in this order in the UI):
- Campaign folder — templates for this run. Each folder has an Auto Send audience (first-touch pool) set in Email Campaign (default New).
- Audience track — default Match folder (auto) uses that linked pool. Override to force New-only or a specific pool. Queue never mixes other tracks.
- Include first-touch on this track — matching pool status + email + no follow-up (Touch 1). Preference remembered on this device.
- Include overdue — also queue follow-ups past due (oldest first).
- Active pipeline only — never Disqualified, Opt Out, No Response, Closed Won, Denied Service.
- Needs a valid email and a 3-touch sequence status (New / Contacted / 2nd Contact) that maps to the selected folder.
- Queue order: overdue → due today → New first-touch. Rows tagged New · Touch 1 are easy to spot before Start. Log/summary show due vs new counts.
- All sendable leads are selected by default. The detailed queue list starts collapsed (expand if you want to inspect or deselect).
Daily limits (50)
- Follow-up schedule cap: 50 — when applying 2nd/3rd presets, no more than 50 leads get the same
next_followupcalendar day (overflow to the next open weekday). - Auto Send send cap: 50 — max successful CRM campaign emails per calendar day. Due, overdue, and New first-touch share this one ceiling. Counted from notes like
Campaign sent (…)(same source as “Emails sent today”). - If 30 already went out today, Auto Send will only send up to 20 more. At 50, it won’t start (or it stops mid-run). Manual Campaign sends are still possible after the cap; Auto Send just rests for the day.
- When selected > remaining capacity, send order still applies: due/overdue follow-ups first, then New first-touch fills leftover room under the 50/day cap. Extra New leads stay New with no follow-up date for a later day.
- Live status, rules callout, and queue summary show sent today / remaining / cap.
- Overflow reschedule: only for due/overdue follow-ups past today’s remaining capacity. An amber panel offers Reschedule overflow: the first N in send order stay for today; excess calendar follow-ups get new
next_followupdates from the next weekday, load-balanced under the 50/day calendar cap (mid-week preferred; Mon/Fri overflow; no weekends). Each rescheduled lead gets an audit note (Auto Send overflow → follow-up moved to …), then the queue rebuilds. New first-touch is never overflow-rescheduled — it only pads leftover capacity and remains untouched for another day.
Campaign folder
Choose which folder’s emails to use (remembered on this device). The rules callout names that folder and shows which emails map to Touch 1 / 2 / 3. Only emails from that folder are used for the run. New first-touch always uses Touch 1 from that folder.
Pacing & controls
- Base delay (default ~60s) + random jitter (default up to ~25s) between sends.
- Daily send cap: 50 successful campaign emails per calendar day (counts CRM “Campaign sent” notes). Auto Send won’t start or will stop when the cap is hit; leftover New first-touch waits for another day; excess due follow-ups can use Reschedule overflow.
- Start → confirm (shows due vs New counts when first-touch is on) → keep this browser tab open while it runs.
- Pause / Resume / Stop anytime. Changing campaign folder, Include New, or Include overdue while running is locked.
- Countdown, ETA, and elapsed sit above a live status log (verbose scrolling feed) that fills the tile.
Same safeguards as Campaign
- Status, last contact, next follow-up, and “Campaign sent” notes update only after a successful send. New first-touch advances like Touch 1 (typically New → Contacted + 2nd follow-up preset).
- Opt Out (and matching emails) blocked — UI and server.
- Failed sends are logged in the live feed; remaining queue continues after the delay (until the daily cap).
8. Contact preferences (opt out)
Professional, signed links — no fragile “unsubscribe” wording in the body. Token binds lead id + email + expiry with HMAC so links can’t be forged or reused forever.
If this isn’t relevant or reached the wrong person, you can update your contact preferences here:
https://…/preferences?t=SIGNED_TOKEN
- Recipient opens the public page (Access-bypassed paths only).
- Confirms with one button (page stays clean — logo + short tagline only).
- Lead → Opt Out + dated note; next follow-up cleared; out of active pipeline and Discover.
- Send blocked: campaign, quick-send, and Auto Send refuse Opt Out leads and any matching email address (UI + server).
- Locked status: Opt Out shows a lock badge (not a free dropdown). Unlock needs two confirms; CSV import cannot clear Opt Out or re-add a follow-up date.
- Success page shows a soft Network26 door (what you do, link to network26.com, phone) — not a hard sell on the confirm step.
Bypass: /preferences*, /api/preferences*.
Secret: PREFERENCES_LINK_SECRET. Status: /api/email/status.
9. Emails sent today & Send Audit
Counts notes dated today containing Campaign sent — a durable audit trail from CRM sends,
not a fragile counter that resets if you change devices. Pipeline tile subtitle: “sent today”.
- Sources: manual Campaign modal, green quick-send, and Auto Send all write the same note format, so every successful CRM send counts.
- Live updates: after each successful send (including while Auto Send is running), the Lead Pipeline tile is refreshed via the same stats path — switch back to Pipeline and the number matches.
- Daily cap (Auto Send): soft ceiling of 50 successful CRM campaign emails per calendar day.
left today = 50 − emails sent today. Auto Send won’t start (or stops mid-run) when remaining hits 0. Manual Campaign sends can still go out after the cap; Auto Send just rests for the day.
Audit tab
Open Audit in the main nav for a full send history built from those same notes:
- Summary tiles:
- All time / Today / This week / This month — send counts (week = Mon–today).
- Left to send today — how many more Auto Send may send under the 50/day cap. Subtitle shows e.g. 12 sent today · Auto Send caps at 50/day (or “cap full”).
- In filter — how many sends match the current date/campaign/template/search filters.
- Quick ranges: Today, this week, last 7 days, last 30 days, this month, all time — plus custom from/to dates. Default on first open is last 7 days so expanding to 30 / month / all is obvious. Active preset is highlighted.
- Campaign + template filters: pick a campaign folder, then optionally narrow by template inside that folder (template list cascades). Search also matches company, email, campaign, template.
- Daily volume chart:
- One bar per calendar day in the range; number above each bar = emails that day.
- Teal = has sends, gray = none, rose = at/over the 50/day cap.
- Long ranges (e.g. last 30 / this month) use fixed-width bars and horizontal scroll; the chart auto-scrolls to the newest days so recent activity isn’t off-screen to the right.
- Header line: total emails · active days · date span. Click a bar to filter that single day.
- Breakdowns: by campaign folder and by template for the active filter.
- Send log: date, company, email, campaign, template, lead status (paginated). Export CSV of the filtered set. Refresh re-reads lead notes after new sends.
- Note format: new sends log
Campaign sent (Template) [Folder] → email. Older notes without a folder still count and are matched to a campaign by template name when possible (“Unknown folder” filter for unmatched).
10. Discover leads (deep dive)
Prospecting without leaving the CRM. Built around Google Places + a Leaflet map.
Search & map
- Rich category list: trades, professional services, healthcare, retail, automotive, and more.
- Location: zip, address, city, or county — geocoded into a search center.
- Search visible area — re-query whatever the map is showing after you pan/zoom.
- Draw area — rectangle selection for custom territory hunting.
- Markers on the map; click a card to highlight the pin (and vice versa).
Enrichment
- Place details load phone and website asynchronously so the list stays snappy.
- Website domains feed DMARC checks.
- Import stamps a “Discovered via Google Places” note with today’s date.
Import, hide, disqualify
- Import — one business → full CRM lead (company, phone, website, address, place id).
- Import all visible — bulk create for the current filtered list (skips already-imported).
- Hide imported — keep the panel focused on net-new prospects.
- Website filter — only show businesses with a site (better for email + DMARC).
- Disqualify — create/update as Disqualified so they stay out of Discover and active pipeline; not “deleted from existence,” just out of your hunt.
- Duplicate detection — Place ID first; else company match plus phone/email/address/website overlap.
Bulk DMARC in Discover
Run DMARC across visible results with concurrency limits so DNS isn’t hammered. Hide p=r/q drops quarantine/reject domains from the list when you’re hunting weaker mail setups.
11. DMARC (deep dive)
DMARC tells you how aggressively a domain protects its email brand. For outbound sales,
weak or missing DMARC often correlates with easier cold-email deliverability conversations —
while p=reject orgs are usually harder targets.
How the CRM checks
- Extract domain from the lead/result website (or email domain when relevant).
- Query DNS TXT for
_dmarc.domain(and organizational parents when needed) via Cloudflare DNS-over-HTTPS. - Parse the policy (
p=) and store status, domain checked, and timestamp on the lead.
| Status | Label | Sales takeaway |
|---|---|---|
missing | No record | No DMARC published — often more approachable for first-touch email. |
none | p=none | Monitoring only; relatively soft posture. |
monitoring | p=quarantine | Stricter — spam folder risk for unaligned mail. |
protected | p=reject | Hard fail for unaligned mail — tough cold-email target. |
error | Check failed | DNS/API hiccup; re-check later. |
- Pipeline: check or re-check per lead; filter by DMARC bucket.
- Discover: per-card check + bulk check; hide strict policies.
- Dashboard lists surface DMARC badges next to actions.
12. CSV export / import
- Export — whatever your filters show, with stable
Idfor round-trips. - Import — update-only. Must include Id. No silent creates of duplicate companies.
- Blank cell = leave CRM value alone; filled cell = overwrite.
- Notes column is for new note text; import appends with a date stamp rather than replacing history.
13. Mobile vs desktop
Designed so you can run the sequence from your phone between meetings.
- Mobile cards: company, contact, status, last contact, follow-up, campaign, edit — bordered so rows don’t blend.
- Desktop table: full columns including industry, notes, DMARC, delete.
- Header actions, filters, and modals reflow so buttons don’t collide.
14. Cloudflare Access & setup notes
- CRM UI typically sits behind Zero Trust Access (your team only).
- Preference links need Bypass on
/preferences*and/api/preferences*only — not the whole app. GET /api/email/status— Graph, templates KV, preferences secret health check.- Email Campaign tab saves campaign folders + emails to KV for every device.
- This help page:
help.html, from the ? control next to your name.
15. A day in the life
- Morning: Open Pipeline — clear Overdue, glance at Emails sent (toward the 50/day cap). Optionally open Audit for longer-range volume (last 7 / 30, by campaign). Then Auto Send → pick campaign folder → optionally enable Include New leads with email and/or Include overdue → if due follow-ups exceed today’s remaining capacity, Reschedule overflow → Start (keep the tab open). New first-touch only pads leftover room under the cap. The Emails sent tile climbs as each send succeeds.
- Prospect: Discover → HVAC contractors near a zip → hide imported & strict DMARC → bulk DMARC if needed → Import the good ones.
- Disqualify noise: Chains, bad fits, no website → Disqualify so they never resurface.
- Outreach: New lead → Campaign → Initial template already selected → Send → status Contacted, follow-up auto-set, preferences footer attached. Or use green quick-send.
- Mid sequence: Contacted / 2nd Contact rows → Campaign again (or leave them for the next Auto Send day) → templates and dates advance automatically.
- Done sequence: No Response, follow-up cleared — leave cold, call, or open the Recycle tab (two confirms) to send the whole parked set back to New or a custom campaign pool for another pass.
- Compliance: Someone hits preferences → Opt Out appears in filter; active pipeline and Auto Send stay clean.
Bottom line
This CRM turns local market research, email-risk scoring, multi-folder campaigns, paced Auto Send, multi-touch outreach, calendar discipline, and preference handling into one workflow — map to mailbox to follow-up — purpose-built for Network26, not a generic sales toy.