Book a call
Menu

Where Ghost Intake data lives

Applies to
Ghost Intake, every installation
From
S M Fahim, Ergonomc LLC
Date
October 15, 2026

This page is for whoever signs off on where your firm's prospect information goes. It describes how Ghost Intake, our intake software, is built and run, and where its protections stop.

The short version

What we say, and how to check it
What we sayHow to check it
Every list, view and deletion in the dashboard is logged with who did it.The dashboard's Audit view.
The intake code tells Google only which step was reached.Your browser's network tab, on the question pages.
Backups run nightly and are locked against deletion for 30 days.The backup bucket's lock rule, in your Cloudflare account.

Where it runs

Each firm gets its own installation, and nothing in one can reach another. What they share is us, as invited members.

Prospect's browser

Cloudflare

your-firm.example

  • /your WordPress site (where it's hosted now)
  • /intake/intake Worker (questions and intake API)
  • admin.your-firm.exampledashboard (behind Cloudflare Access)
  • Durable Objects: wrap-up timers and rate limits, no contact details or answers
  • Backups (R2): nightly, locked 30 days
  • Email Sending: notifications to allow-listed addresses only
  • Turnstile: bot check

Postgres, hosted by Neon

Every lead

Lead Docket (your CRM)

Records and transcripts

Our side

Uptime monitor, checking the intake and dashboard routes from outside · Alerts from the Worker

Figure 1. What connects to what.Simplified diagram.
What connects to what. Simplified diagram.
The parts of Ghost Intake
PartWhere it runs and what it does
WordPress pluginOn your site. Shows the form and keeps first-touch attribution in a 90-day first-party cookie.
Intake WorkerOn Cloudflare, at /intake/ on your domain. Serves the questions, saves each step and sends records, transcripts and staff emails.
DashboardOn Cloudflare Pages, behind Cloudflare Access. Read-only, except for deleting leads.
DatabasePostgres, hosted by Neon. Holds every lead.

Cloudflare Durable Objects run each lead's wrap-up timer and the rate limits, and hold no contact details or answers.

What it stores

What Ghost Intake stores
DataExampleWhy
Contact detailsName, phone, emailTo call the prospect back
Consent recordThe exact wording shown, with the timeTo show what the person agreed to
AnswersEach tapped or typed answer (up to 200 characters), with the timeSo your team knows what happened
SourceCampaign tags, ad click IDs, landing page, referrer, analytics client IDTo see which sources send leads
Technical signalsDevice type, a keyed hash of the IP, time on the contact step, whether the questions openedBot checks and rate limits
Form viewsA random per-browser ID and the page address, without its query stringTo count conversion and spot a form nobody sees

All of it is stored in the database, and nothing is added from outside sources. The per-browser ID is linked to the lead if that browser submits.

Who can see it

The public side

The prospect-facing API accepts contact steps and answers. It returns nothing but the visitor's own place in the questions, to the browser holding their session token.

That token is random (128 bits), lasts four hours and is stored only as a SHA-256 hash. It leaves the address bar before any analytics tag can read it. No personal information travels in URLs.

The dashboard

Sign-in takes an address on your allow-list and a one-time code that Cloudflare Access emails to it. The allow-list is your firm's domain plus any addresses you add, as the Access policy in your Cloudflare account shows. Sessions last 24 hours by default.

The dashboard checks the sign-in token again in its own code. There are no separate roles: everyone signed in sees every lead and can delete leads.

Our access

We work in your accounts as invited members to install, maintain and monitor the system, and that access lets us see lead data. You can remove us in each provider's settings and from the allow-list.

Our uptime monitor checks the pages and backups from outside, and operational alerts come to us.

Logs and encryption

Audit entries keep the person's email address and the time, and are never purged. Deletion entries leave out the prospect's name and phone. Application logs are written to hold no personal information, with tokens redacted.

Visitor IP addresses are stored only as a keyed hash (HMAC). TLS protects the connections from the browser to Cloudflare, and from the Worker and dashboard to the database and Lead Docket. The providers encrypt the database and backups at rest.

Ghost Intake doesn't add an encryption layer of its own. Inside the database and the backups, contact details and answers are ordinary records, protected by provider encryption and by who can reach the accounts. Notification emails travel under your mail system's own rules.

What leaves the system

What each outside service receives
ServiceWhat it receives
Lead DocketContact details, case type, texting consent, source, our lead ID and the transcripts
Your email systemOne email per lead, with contact details and the transcript, to allow-listed addresses only
Google Analytics, if you use itStep progress from the intake code: form seen, started, a question answered, finished
Cloudflare TurnstileThe browser signals it uses to tell people from scripts

It never emails a prospect. The email service and the code both refuse any address that isn't on the allow-list. Mail goes out from its own subdomain, leaving your main email records alone.

Tags you already run collect whatever they're set to, and some, such as Google's automatic collection of user-provided data, can read form fields. We review them with you at installation.

Retention, deletion and backups

Five years. Leads and form-view records are deleted automatically after 1,825 days. The purge is set in the code, the same for every installation. Until then, the consent record is there if a call or text is disputed.

Deleting can't be undone from the dashboard. A dashboard deletion removes the lead from the database. Copies in Lead Docket and your mailboxes follow their own retention.

Nightly backups. Each is read back and counted the same night, and a bad one raises an alert. Each is locked against deletion and overwriting for 30 days. The lock is a rule on the backup bucket in your Cloudflare account. An account admin can remove it.

Backups outlast deletions. A backup written before a deletion still holds that lead, and restoring it brings back leads deleted since. Restores follow a written procedure.

When something fails

Deliveries to Lead Docket and email wait in a queue in the database, and the lead stays there if one fails. A failed delivery is retried after 1, 2, 4, 8 and 16 minutes, then set aside, and we're alerted.

We're also alerted when the database can't be reached, a lead isn't wrapped up on time, or the form stops being seen.

Every submission goes through Cloudflare Turnstile, a honeypot field people never see, a minimum time on the form and rate limits. A visitor who fails Turnstile is asked to try again or call. If Turnstile is unavailable, the lead is accepted and marked unchecked, and we're alerted.

What we don't claim

  • This page describes how Ghost Intake is built and run. It isn't a certification or an outside audit, and the system hasn't had a formal penetration test.
  • We don't describe Ghost Intake as compliant with any law or standard. Whether your intake meets your consent, advertising and privacy rules is your firm's call.
  • It can't delete anything in Lead Docket or your mailboxes, and it doesn't control what your own tags collect.

Questions this page doesn't answer

Email support@ergonomc.com, or bring your security questionnaire to a demo and we'll go through it with whoever reviews vendors at your firm.