Visitor/Cookie Export — Admin vs Client. Column filtering is implemented in vi-portal/src/index.js (lines 1581–1671).
Served to non-admin accounts via DuckDB-WASM parquet export in browser. Controlled by CLIENT_COLUMNS array (line 1581).
| # | Header | Source Column | Notes |
|---|---|---|---|
| Contact Information | |||
| 1 | First Name | first_name | |
| 2 | Last Name | last_name | |
| 3 | Business Email | business_email | |
| 4 | Personal Email | personal_emails | |
| 5 | Additional Emails | additional_personal_emails | |
| 6 | Mobile | mobile_phone | |
| 7 | Direct Phone | direct_number | |
| 8 | Personal Phone | personal_phone | |
| 9 | LinkedIn Profile | linkedin_url | |
| Company Information | |||
| 10 | Company Name | company_name | |
| 11 | Company Domain | company_domain | |
| 12 | Company City | company_city | |
| 13 | Company State | company_state | |
| 14 | Company Zip Code | company_zip | |
| 15 | Company Address | company_address | |
| 16 | Company Country | company_country | |
| 17 | Company Phones | company_phone | |
| 18 | Company LinkedIn Profile | company_linkedin_url | |
| Professional Details | |||
| 19 | Title | job_title | |
| 20 | Job Title Normalized | job_title_normalized | |
| 21 | Seniority Level | seniority_level | |
| 22 | Seniority Level 2 | seniority_level_2 | |
| 23 | Department | department | |
| 24 | Department 2 | department_2 | |
| 25 | Professional City | professional_city | |
| 26 | Professional State | professional_state | |
| 27 | Professional Zip | professional_zip | |
| 28 | Professional Address 1 | professional_address | |
| 29 | Professional Address 2 | professional_address_2 | |
| Firmographics | |||
| 30 | Revenue Level | company_revenue | |
| 31 | Employees Level | company_employee_count | |
| 32 | Primary Industry | primary_industry | |
| 33 | Company Description | company_description | |
| 34 | Related Domains | related_domains | |
| 42 | NAICS | company_naics | |
| 43 | SIC | company_sic | |
| Demographics | |||
| 35 | Gender | gender | |
| 36 | Age Range | age_range | |
| 37 | Marital Status | married | |
| 38 | Children | children | |
| 39 | Income Range | income_range | |
| 40 | Net Worth | net_worth | |
| 41 | Homeowner Status | homeowner | |
| Personal Address | |||
| 44 | Personal Address | personal_address | |
| 45 | Personal City | personal_city | |
| 46 | Personal State | personal_state | |
| 47 | Personal Zip | personal_zip | |
| Identity & Behavior | |||
| 48 | IP Address | ip_address | |
| 49 | Hashed Email (SHA256) HEM | sha256_lc | |
| 50 | Last Page Visited | page_url | Aggregated from visit events |
| 51 | Pages Visited | pages_visited | STRING_AGG of distinct paths |
| 52 | Last Visit | last_visit_date | MAX(event_date) |
| 53 | Visit Count | visit_count | COUNT(*) per trovo_id |
| 54 | Top Referrer | referrer | MAX(referrer) |
Admin sees everything — all client columns plus these. From Object.keys(FRIENDLY_NAMES) (line 1939).
| # | Header | Source Column | Why Admin-Only |
|---|---|---|---|
| 1 | Professional Zip 4 | professional_zip4 | Too granular for client use |
| 2 | Work History | work_history | Not needed unless selling to recruiters |
| 3 | Education History | education_history | Not needed unless selling to recruiters |
| 4 | Social Connections | social_connections | Currently empty across all records |
| 5 | Result Type | enrichment_path | Internal — direct_upid / hem_upid / unenriched |
| 6 | Person ID | up_id | Internal — Universal Person identity key |
| 7 | Enriched At | enriched_at | Internal timestamp |
| 8 | Site ID | pixel_id | Internal pixel identifier |
| 9 | CC ID | cc_id | Internal cookie/trovo_id |
| 10 | Last Updated | last_updated | Internal timestamp |
| 11 | Business Email Validation | business_email_validation_status | Internal QA field |
| 12 | Programmatic Business Emails | programmatic_business_emails | Internal |
| 13 | Historical Programmatic Emails | historical_programmatic_emails | Internal |
{ urls, columns, friendly_names }columns from API responsecolumns + friendly_names for headers| Aspect | Visitor Export | Market Pulse Export |
|---|---|---|
| Where filtering happens | vi-portal API → browser renders subset | EC2 resolve → separate filtered CSV file |
| Parquet/CSV has all cols? | Yes — browser filters | No — client CSV only has client cols |
| Friendly headers | Applied in browser via FRIENDLY_NAMES map |
Applied in DuckDB SQL via AS "Header" aliases |
| Admin-only columns | 13 extra columns | 7 excluded columns |
| Column control | CLIENT_COLUMNS array in vi-portal |
CLIENT_COLUMNS SQL string in ec2-resolve |
| Status | DONE — deployed | DONE — deployed 2026-03-15 |