Elite Outsiders ← Tools menu Email Sources

Email Sources

Where every email comes from on Elite Outsiders, and where it lands. Aggregated from contacts (D1 master table). Updates live as new emails come in.

↻ Reconcile with Kit Pulls Kit subscribers, fills gaps in contacts, marks drift unsubs. Manual run for now.
Total contacts
unique emails
Newsletter
consented to weekly emails
Quiz takers
Trauma Map + Trigger Map
Buyers
Lemon Squeezy orders
Bookings
Cal.com calls scheduled
Unsubscribed
consent revoked / Kit unsub

Capture points — where emails come in

Every place on EliteOutsiders.com (and via webhooks) where a new email enters the system. All routes write to D1 contacts via a shared upsert helper.

Homepage signup — section "Frameworks". Form on /index.htmlPOST /api/subscribe-newsletter D1: kit_consents, contacts Kit tag: newsletter_frameworks
Frameworks landing page — /frameworks.htmlPOST /api/subscribe-newsletter D1: kit_consents, contacts Kit tag: newsletter_frameworks
Library page — /library.htmlPOST /api/subscribe-newsletter D1: kit_consents, contacts Kit tag: newsletter_frameworks
quiz Trauma Map quiz — /trauma-map.html email screen → POST /api/submit-trigger-map D1: submissions, contacts + Resend (results email) Kit tag: trauma_map_completed
purchase Lemon Squeezy webhook — POST /api/webhooks/lemonsqueezy on order_created D1: purchases, events, contacts — (webhook does not push to Kit yet)
booking Cal.com webhook — POST /api/webhooks/cal on BOOKING_CREATED D1: bookings, events, contacts — (webhook does not push to Kit yet)
reverse Kit unsubscribe webhook — POST /api/webhooks/kit?secret=… D1: updates contacts.kit_unsubscribed_at + kit_consents.revoked_at From Kit → us (reverse sync)

Storage map — where emails live

Four storage targets. Master is contacts (one row per unique email). The rest are per-source detail tables.

D1 · contacts Master aggregate — one row per unique email, with per-source flags + Kit sync state PRIMARY view for this dashboard Updated on every capture
D1 · kit_consents GDPR audit trail — when consent was given, when revoked, by which endpoint Source of truth for consent Newsletter + quiz endpoints
D1 · submissions / trauma_map_results Quiz answers + scoring results, replay payload Per-quiz-completion rows (multiple per email) Quiz endpoint
D1 · purchases / bookings Purchase & booking webhook payloads, full raw_json Per-event rows LS / Cal webhooks
Kit (external) External master list — newsletter + quiz emails are pushed there with tags Web UI: kit.com Reverse sync via /api/webhooks/kit

Source overlaps — who hits multiple touchpoints

Pair-wise overlap counts. "Newsletter ∩ Buyers" = emails that subscribed AND bought.

First touchpoint

For each contact, which source captured them first.

SourceCount

Newsletter signup origin

Among newsletter subscribers, which page they signed up on.

Page / source slugCount

Recent contacts (200 most recent)

EmailNameSourcesFirst touchLast seen# captures
Loading…