Leads
Data Entity
Description
Prospective organization contacts captured through the product sales website demo booking flow and other inbound channels. Each lead represents a potential customer organization interested in the Meander platform, storing contact details, organization context, and sales qualification data to support the Norse Digital Products sales pipeline.
Data Structure
| Name | Type | Description | Constraints |
|---|---|---|---|
id |
uuid |
Unique identifier for the lead record | PKrequiredunique |
first_name |
string |
First name of the contact person at the prospective organization | required |
last_name |
string |
Last name of the contact person at the prospective organization | required |
email |
string |
Business email address of the lead contact person, used for confirmation emails and sales follow-up | required |
phone |
string |
Phone number of the lead contact person for sales outreach | - |
organization_name |
string |
Name of the prospective organization interested in Meander | required |
organization_type |
string |
Type or category of the prospective organization (e.g., non-profit, public sector, membership organization) | - |
organization_size |
string |
Approximate number of peer mentors or volunteers the organization manages, used for sizing and pricing | - |
role_title |
string |
Job title or role of the lead contact within their organization | - |
source |
enum |
Channel through which the lead was acquired | required |
status |
enum |
Current stage of the lead in the sales pipeline | required |
notes |
text |
Free-text notes from sales team about the lead, conversation history, and qualification details | - |
message |
text |
Initial message or inquiry submitted by the lead through the booking form | - |
utm_source |
string |
UTM source parameter captured from the referring URL for marketing attribution | - |
utm_medium |
string |
UTM medium parameter captured from the referring URL | - |
utm_campaign |
string |
UTM campaign parameter captured from the referring URL | - |
ip_address |
string |
IP address of the lead at form submission time, used for rate limiting and fraud detection | - |
consent_given |
boolean |
Whether the lead explicitly consented to data processing and sales contact under GDPR | required |
consent_timestamp |
datetime |
Timestamp when GDPR consent was recorded | - |
created_at |
datetime |
Timestamp when the lead record was created | required |
updated_at |
datetime |
Timestamp of the last modification to the lead record | required |
Database Indexes
idx_leads_email
Columns: email
idx_leads_status
Columns: status
idx_leads_source
Columns: source
idx_leads_created_at
Columns: created_at
idx_leads_organization_name
Columns: organization_name
idx_leads_status_created
Columns: status, created_at
Validation Rules
email_format_validation
error
Validation failed
required_fields_present
error
Validation failed
phone_format_validation
warning
Validation failed
message_length_limit
error
Validation failed
xss_sanitization
error
Validation failed
status_enum_validation
error
Validation failed
consent_timestamp_consistency
error
Validation failed
Business Rules
lead_deduplication_by_email
When a new lead is submitted with an email that already exists, link the new demo booking to the existing lead rather than creating a duplicate. Update the existing lead's updated_at timestamp and append to notes.
gdpr_consent_required
A lead record must not be created unless consent_given is true and consent_timestamp is set. Norwegian GDPR regulations require explicit opt-in before storing personal data for sales purposes.
status_transition_enforcement
Lead status transitions must follow a valid sequence: new → contacted → qualified → demo_scheduled → demo_completed → proposal_sent → negotiation → won/lost. Disqualified can be set from any status. Backwards transitions are not allowed except to disqualified or lost.
rate_limit_per_ip
No more than 5 lead submissions per IP address within a 1-hour window to prevent spam and abuse of the demo booking form.
lead_soft_delete_only
Leads must never be hard-deleted from the database. Status should be set to disqualified or lost instead. GDPR erasure requests are handled by anonymizing PII fields while retaining the record for analytics.
confirmation_email_on_create
A confirmation email must be dispatched to the lead's email address immediately after a lead is created via the demo booking flow.