What Drives Contribution at FamilySearch?

A Behavioral Lens on New Users - A Case Study

Author

Felix Jena

Libraries Used, Dataset, and Tasks

Show the code
pacman::p_load(tidyverse, lubridate, janitor, DT, pander, plotly, scales)

# Loading in dataset
fs_data <- read_csv("C:/Users/felix/OneDrive/Documents/Family Search BI Analyst Interview/April_2025_Case_Study_Data.csv") %>%
  clean_names() %>%
  mutate(across(contains("_date"), ymd))

Executive Summary

This case study explores how new users interact with FamilySearch’s core features and redefines user segments based on depth and type of engagement. We segmented users into four behavior-based profiles based on what they actually did inside the platform - from browsing to building.

By rethinking our segmentation model, we gain sharper insight into where users thrive, where they stall, and how we might turn intention into lasting contribution.

Engagement Snapshot

Show the code
engagement_summary <- fs_data %>%
  select(
    total_days_logging_in,
    total_days_viewing_records,
    total_days_adding_names_to_tree,
    names_added_to_tree,
    total_days_editing_tree,
    total_days_uploading_memories,
    memories_uploaded,
    total_days_attaching_sources_to_tree,
    sources_attached_to_tree,
    total_days_using_get_involved
  ) %>%
  summary()

pander(engagement_summary, caption = "Engagement Activity Summary Across Key Features")
Engagement Activity Summary Across Key Features (continued below)
total_days_logging_in total_days_viewing_records
Min. : 0.000 Min. : 0.0000
1st Qu.: 1.000 1st Qu.: 0.0000
Median : 1.000 Median : 0.0000
Mean : 2.594 Mean : 0.7469
3rd Qu.: 2.000 3rd Qu.: 1.0000
Max. :272.000 Max. :254.0000
Table continues below
total_days_adding_names_to_tree names_added_to_tree
Min. : 0.0000 Min. : 0.000
1st Qu.: 0.0000 1st Qu.: 0.000
Median : 1.0000 Median : 2.000
Mean : 0.7737 Mean : 4.571
3rd Qu.: 1.0000 3rd Qu.: 5.000
Max. :255.0000 Max. :25432.000
Table continues below
total_days_editing_tree total_days_uploading_memories memories_uploaded
Min. : 0.0000 Min. : 0.00000 Min. : 0.000
1st Qu.: 0.0000 1st Qu.: 0.00000 1st Qu.: 0.000
Median : 0.0000 Median : 0.00000 Median : 0.000
Mean : 0.7738 Mean : 0.05084 Mean : 0.246
3rd Qu.: 1.0000 3rd Qu.: 0.00000 3rd Qu.: 0.000
Max. :262.0000 Max. :166.00000 Max. :5813.000
Table continues below
total_days_attaching_sources_to_tree sources_attached_to_tree
Min. : 0.0000 Min. : 0.00
1st Qu.: 0.0000 1st Qu.: 0.00
Median : 0.0000 Median : 0.00
Mean : 0.1961 Mean : 7.47
3rd Qu.: 0.0000 3rd Qu.: 0.00
Max. :255.0000 Max. :235901.00
total_days_using_get_involved
Min. : 0.00000
1st Qu.: 0.00000
Median : 0.00000
Mean : 0.01648
3rd Qu.: 0.00000
Max. :176.00000

The engagement snapshot shows us that while many users explore or browse the platform, only a smaller portion actively contribute - and even fewer become power users. It highlights a clear drop-off between passive interest and active participation, pointing to a big opportunity to turn more browsers into creators. That gap between browsers and creators suggests high interest but low activation - meaning users arrive curious but don’t always know how to contribute.

Show the code
na_counts <- fs_data %>%
  summarise(across(contains("_date"), ~ sum(is.na(.)))) %>%
  pivot_longer(everything(), names_to = "Column", values_to = "Missing_Count")

datatable(
  na_counts,
  caption = "Missing Values in Key Engagement Dates",
  options = list(pageLength = 5)
)

Behavior-Based Segments

Show the code
fs_data <- fs_data %>%
  mutate(
    creator = names_added_to_tree > 0 | total_days_editing_tree > 0,
    browser_only = total_days_logging_in > 0 & names_added_to_tree == 0 & total_days_editing_tree == 0,
    dormant = total_days_logging_in == 0,
    memory_uploader = memories_uploaded > 0,
    researcher = sources_attached_to_tree > 0,
    behavior_segment = case_when(
      dormant ~ "Dormant",
      creator & memory_uploader & researcher ~ "Power User",
      creator ~ "Creator",
      browser_only ~ "Browser Only",
      memory_uploader | researcher ~ "Supportive Contributor",
      TRUE ~ "Unclassified"
    )
  )

We categorized users into four behavioral segments to reflect how they engage with FamilySearch. Power Users are highly active, using at least three core features like adding names, editing trees, uploading memories, or attaching sources. Creators contribute by adding names to the tree but use fewer advanced features. Browser Only users explore the site (logins, record views) without making contributions. Dormant users registered but never engaged. These segments help us understand where users drop off, who drives value, and where we can focus efforts to guide behavior and boost retention.

Show the code
segment_distribution <- fs_data %>%
  count(behavior_segment, sort = TRUE)

plot_ly(segment_distribution,
        x = ~n,
        y = ~behavior_segment,
        type = "bar",
        orientation = "h",
        text = ~scales::comma(n),
        textposition = "auto",
        marker = list(color = "mediumseagreen")) %>%
  layout(title = "User Distribution by Behavior Segment",
         xaxis = list(title = ""),
         yaxis = list(title = "
                      "))

Insight: Most users fall into Dormant or Browser-Only segments. These users log in but don’t contribute - yet. There’s untapped potential in converting these passive users with guided nudges and quick wins. Meanwhile, Power Users are rare but influential - we should amplify their impact.

Segment vs. Age Group

Show the code
age_seg_summary <- fs_data %>%
  count(age_group, behavior_segment) %>%
  drop_na() %>%
  ggplot(aes(x = age_group, y = n, fill = behavior_segment)) +
  geom_col(position = "stack") +
  scale_y_continuous(labels = comma) +
  labs(
    title = "Behavior Segment Breakdown by Age Group",
    x = "Age Group", y = "User Count", fill = "Segment"
  ) +
  theme_minimal(base_size = 13) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

age_seg_summary

Insight: The 18–35 age group is driving most platform activity, including Creator and Power User roles. But Browser-Only users are present across all age groups - especially 50+. These users may benefit from simplified interfaces and value-focused onboarding.

Top Countries by User Count

Show the code
country_counts <- fs_data %>%
  count(country, sort = TRUE) %>%
  slice_max(order_by = n, n = 10)

ggplot(country_counts, aes(x = reorder(country, n), y = n)) +
  geom_col(fill = "seagreen") +
  geom_text(aes(label = scales::comma(n)), hjust = -0.1) +
  coord_flip() +
  scale_y_continuous(labels = scales::comma) +
  labs(title = "Top 10 Countries by User Count",
       x = "Country", y = "User Count") +
  theme_minimal()

Insight: Brazil and the U.S. are your largest user bases. Tailor re-engagement and onboarding flows in those countries first - they offer the most leverage.

Segment Breakdown by Country

Show the code
top_country_names <- country_counts$country

country_seg <- fs_data %>%
  filter(country %in% top_country_names) %>%
  count(country, behavior_segment)

ggplot(country_seg, aes(x = behavior_segment, y = n, fill = country)) +
  geom_col(position = "dodge") +
  scale_y_continuous(labels = comma) +
  labs(title = "Behavior Segments Across Top Countries",
       x = "Behavior Segment", y = "User Count") +
  theme_minimal(base_size = 12) +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))

Insight: Power Users cluster heavily in Brazil and the U.S. Localization matters here - even small regional adaptations may turn “Creators” into “Champions.”

Recommendations

1. Activate Dormants with Personalized Nudges

  • Prompt dormant users 3–5 days post sign-up with quick-start actions.
  • Use messaging like: “Just 1 name can start your family story.”

2. Guide Browsers to First Contribution

  • Trigger a soft CTA: “Click here to validate a fact.”
  • Offer mobile-first suggestions or 1-click tips.

3. Celebrate Supportive Contributors

  • Highlight users who uploaded photos or linked sources.
  • Reward their effort - even if they didn’t build trees.

4. Spotlight Power Users

  • Offer badges, contributor stats, or “monthly spotlight.”
  • Invite them to beta test new features.

5. Age-Sensitive Design

  • 18–35: Quick, mobile-first, gamified tasks.
  • 50+: Clear, accessible walkthroughs with legacy framing.