Contacts Table
The contacts table contains individual person records with professional contact information and email verification data. This is the primary table for building prospect lists, outbound campaigns, and enrichment workflows.
Quick stats
| Metric | Value |
|---|
| Total records | TODO |
| Verified emails | TODO |
| Update frequency | TODO |
| Primary key | contact_id |
| Main foreign key | company_id → companies.company_id |
Data dictionary & fill rates
Identifiers
| Field | Type | Fill rate | Description |
|---|
contact_id | VARCHAR | 100% | Unique RevenueBase identifier for this contact |
company_id | VARCHAR | TODO% | Foreign key to companies table |
linkedin_url | VARCHAR | TODO% | Personal LinkedIn profile URL |
Name & demographics
| Field | Type | Fill rate | Description |
|---|
first_name | VARCHAR | TODO% | First name |
last_name | VARCHAR | TODO% | Last name |
full_name | VARCHAR | TODO% | Combined full name |
gender | VARCHAR | TODO% | Inferred gender: male, female, unknown |
location_city | VARCHAR | TODO% | Contact’s city (may differ from company HQ) |
location_state | VARCHAR | TODO% | Contact’s state/province |
location_country | VARCHAR | TODO% | Contact’s country (ISO 2-letter code) |
Professional info
| Field | Type | Fill rate | Description |
|---|
title | VARCHAR | TODO% | Current job title |
seniority_level | VARCHAR | TODO% | Normalized seniority: c_suite, vp, director, manager, senior, entry, other |
department | VARCHAR | TODO% | Functional department: engineering, sales, marketing, finance, hr, operations, legal, other |
title_role | VARCHAR | TODO% | Normalized role from title (e.g., ceo, cto, vp_sales, sdr) |
| Field | Type | Fill rate | Description |
|---|
email | VARCHAR | TODO% | Primary professional email address |
email_verified | BOOLEAN | TODO% | Whether the email has passed verification |
verification_status | VARCHAR | TODO% | Detailed status: valid, invalid, catch_all, unknown, disposable |
last_verified_at | TIMESTAMP | TODO% | When the email was most recently verified |
bounce_risk | VARCHAR | TODO% | Deliverability risk: low, medium, high |
direct_phone | VARCHAR | TODO% | Direct dial phone number |
mobile_phone | VARCHAR | TODO% | Mobile phone number |
Company context (denormalized)
These fields are copied from the companies table for convenience. For the full set of company attributes, join to companies on company_id — or use the People + Companies pre-joined table.
| Field | Type | Fill rate | Description |
|---|
company_name | VARCHAR | TODO% | Company name (from companies table) |
company_domain | VARCHAR | TODO% | Company primary domain |
company_industry | VARCHAR | TODO% | Company industry |
company_employee_count | INTEGER | TODO% | Company employee count |
| Field | Type | Fill rate | Description |
|---|
created_at | TIMESTAMP | 100% | When this record was first added |
updated_at | TIMESTAMP | 100% | When this record was last modified |
data_source | VARCHAR | TODO% | Primary data source for this record |
Fill rates are approximate and vary by segment. Contacts at larger, US-based companies tend to have higher fill rates for direct dials, seniority, and department. International and SMB records may have lower fill rates on some fields.
Understanding verification fields
verification_status | What it means | Safe to send? |
|---|
valid | Email confirmed deliverable via SMTP verification | ✅ Yes |
invalid | Email confirmed undeliverable | ❌ No |
catch_all | Domain accepts all emails — specific address unverifiable | ⚠️ Proceed with caution |
unknown | Verification inconclusive (server timeout, etc.) | ⚠️ Proceed with caution |
disposable | Temporary / throwaway email address | ❌ No |
For the safest outbound sends, filter on verification_status = 'valid' AND last_verified_at >= DATEADD(day, -30, CURRENT_DATE()). This gives you recently verified, confirmed-deliverable addresses.
Example queries
Build a prospect list
SELECT
first_name,
last_name,
email,
title,
seniority_level,
company_name,
company_employee_count
FROM contacts
WHERE email_verified = TRUE
AND seniority_level IN ('c_suite', 'vp', 'director')
AND department IN ('engineering', 'sales')
AND company_industry = 'Software'
AND company_employee_count BETWEEN 100 AND 1000
ORDER BY last_verified_at DESC
LIMIT 500;
Check fill rates yourself
SELECT
COUNT(*) as total_records,
ROUND(COUNT(email) * 100.0 / COUNT(*), 1) as email_fill_pct,
ROUND(COUNT(CASE WHEN email_verified THEN 1 END) * 100.0 / COUNT(*), 1) as verified_pct,
ROUND(COUNT(direct_phone) * 100.0 / COUNT(*), 1) as phone_fill_pct,
ROUND(COUNT(title) * 100.0 / COUNT(*), 1) as title_fill_pct,
ROUND(COUNT(seniority_level) * 100.0 / COUNT(*), 1) as seniority_fill_pct,
ROUND(COUNT(department) * 100.0 / COUNT(*), 1) as department_fill_pct
FROM contacts;