Elite Outsiders ← Tools menu

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 Kit tag: customer
booking Cal.com webhook — POST /api/webhooks/cal on BOOKING_CREATED D1: bookings, events, contacts Kit tag: booking_call
reverse Kit reverse webhook — POST /api/webhooks/kit?event=activate|unsubscribe&secret=… D1: upsert contacts on activate / mark kit_unsubscribed_at on unsub Kit → us (bidirectional 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

Kit (live) — external master list

Pulled live from Kit V4 API using KIT_API_KEY. Total active = real subscribers in your Kit account right now. Drift = D1 vs Kit gap.

Kit · active subscribers
D1 · contacts with kit_id
Drift · newsletter, no kit_id
Connection

If "Drift" > 0, run Reconcile with Kit at the top — the site endpoint backfills missing kit_subscriber_id.

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…