Skip to main content

Historical Experience Table

The historical_experience table tracks career history for contacts in the RevenueBase database. Each row represents one position a contact has held. Use it to understand career trajectories, identify recent job changers, find alumni of specific companies, and build more personalized outreach.

Quick stats

MetricValue
Total recordsTODO
Unique contacts with historyTODO
Average positions per contactTODO
Update frequencyTODO
Primary keyexperience_id
Main foreign keyscontact_id → contacts.contact_id, company_id → companies.company_id

Data dictionary & fill rates

Identifiers

FieldTypeFill rateDescription
experience_idVARCHAR100%Unique identifier for this experience record
contact_idVARCHAR100%Foreign key to contacts table
company_idVARCHARTODO%Foreign key to companies table (NULL if company not in our database)

Position details

FieldTypeFill rateDescription
titleVARCHARTODO%Job title held during this position
seniority_levelVARCHARTODO%Normalized seniority at this role: c_suite, vp, director, manager, senior, entry, other
departmentVARCHARTODO%Functional department during this role
is_currentBOOLEANTODO%Whether this is the contact’s current position

Company context

FieldTypeFill rateDescription
company_nameVARCHARTODO%Company name for this position
company_domainVARCHARTODO%Company domain for this position
company_industryVARCHARTODO%Industry of the company at this position
company_employee_countINTEGERTODO%Employee count of the company (at time of record)

Dates & tenure

FieldTypeFill rateDescription
start_dateDATETODO%When the contact started this position
end_dateDATETODO%When the contact left this position (NULL if current)
tenure_monthsINTEGERTODO%Calculated tenure in months (NULL if current)

Metadata

FieldTypeFill rateDescription
created_atTIMESTAMP100%When this record was first added
updated_atTIMESTAMP100%When this record was last modified
Fill rates for historical data are inherently lower than current-position data. Older positions, smaller companies, and non-US contacts tend to have less complete records. start_date and end_date may only have year or year-month precision in some cases.

Common use cases

People who just started a new role are 3–5x more likely to buy new tools. Target contacts whose most recent position started within the last 90 days.
Find everyone who used to work at a specific company — great for selling to former champions who already know your product.
Understand whether a contact is trending toward more senior roles (likely a decision-maker) or has been lateral (likely an evaluator/user).
Short average tenure can indicate a company with high turnover. Long tenure at the current role can indicate stability and buying authority.

Example queries

Recent job changers (last 90 days)

SELECT
    c.first_name,
    c.last_name,
    c.email,
    he.title as new_title,
    he.company_name as new_company,
    he.start_date,
    prev.title as previous_title,
    prev.company_name as previous_company
FROM historical_experience he
JOIN contacts c ON he.contact_id = c.contact_id
LEFT JOIN historical_experience prev
  ON prev.contact_id = he.contact_id
  AND prev.is_current = FALSE
  AND prev.end_date = (
    SELECT MAX(end_date)
    FROM historical_experience
    WHERE contact_id = he.contact_id AND is_current = FALSE
  )
WHERE he.is_current = TRUE
  AND he.start_date >= DATEADD(day, -90, CURRENT_DATE())
  AND c.email_verified = TRUE
ORDER BY he.start_date DESC;

Alumni of a specific company

SELECT
    c.first_name,
    c.last_name,
    c.email,
    c.title as current_title,
    c.company_name as current_company,
    he.title as former_title,
    he.start_date,
    he.end_date,
    he.tenure_months
FROM historical_experience he
JOIN contacts c ON he.contact_id = c.contact_id
WHERE he.company_domain = 'salesforce.com'  -- change to your target
  AND he.is_current = FALSE
  AND c.email_verified = TRUE
ORDER BY he.end_date DESC;

Average tenure by seniority level

SELECT
    seniority_level,
    COUNT(*) as positions,
    ROUND(AVG(tenure_months), 1) as avg_tenure_months,
    ROUND(MEDIAN(tenure_months), 1) as median_tenure_months
FROM historical_experience
WHERE tenure_months IS NOT NULL
  AND is_current = FALSE
GROUP BY seniority_level
ORDER BY avg_tenure_months DESC;