Skip to content

FamilySearch Genealogical Data Model

Research Date: 2026-01-24


FamilySearch, operated by The Church of Jesus Christ of Latter-day Saints, has the most mature and battle-tested genealogical data model in existence. Their system uses GEDCOM X as the underlying data format and maintains GEDCOM 7 (FamilySearch GEDCOM) as the interchange standard. The key insight is that FamilySearch uses only two relationship types (Couple and Parent-Child) with fact qualifiers to express the full complexity of family relationships.


FamilySearch’s data model is centered on persons linked together by relationships. All other data objects (sources, places, discussions, memories) provide supporting information.

Person ←→ Relationships ←→ Person
↓ ↓ ↓
Facts Facts Facts
↓ ↓ ↓
Sources Sources Sources

FamilySearch has only two relationship types:

Relationship TypeDescriptionAPI Resource
Couple RelationshipBetween two people (spouses, partners)/platform/tree/couple-relationships/{crid}
Child-and-Parents RelationshipBetween a child and up to two parents/platform/tree/child-and-parents-relationships/{caprid}

This is a critical design choice. Rather than having dozens of relationship types, they use a minimal set with facts/qualifiers to express nuance.

A Person in FamilySearch includes:

ComponentDescription
IDUnique identifier (e.g., KWQV-BGF)
NamesMultiple names with types (birth, married, AKA)
GenderMale, Female, Unknown
FactsBirth, death, and other life events
RelationshipsLinks to couple and parent-child relationships
SourcesEvidence supporting conclusions
DiscussionsCommunity research notes
MemoriesPhotos, documents, audio
Change HistoryAudit trail of modifications

The Couple Relationship connects two persons as partners/spouses.

Structure:

{
"id": "relationship-id",
"person1": { "resourceId": "PERSON-1-ID" },
"person2": { "resourceId": "PERSON-2-ID" },
"facts": [
{
"type": "http://gedcomx.org/Marriage",
"date": { "original": "12 June 1950" },
"place": { "original": "Salt Lake City, Utah" }
}
]
}

Supported Facts on Couple Relationships:

Fact Type URIDescription
http://gedcomx.org/MarriageLegal or ceremonial marriage
http://gedcomx.org/CommonLawMarriageCommon law marriage
http://gedcomx.org/DivorceLegal divorce
http://gedcomx.org/AnnulmentMarriage annulment
http://familysearch.org/v1/LivedTogetherCohabitation without marriage
http://familysearch.org/v1/CoupleNeverHadChildrenChildless couple marker

Note on Gender: FamilySearch now supports same-sex couples. The API uses generic person1/person2 (not husband/wife) to accommodate all relationships.

The Child-and-Parents Relationship connects a child to their parents.

Structure:

{
"id": "relationship-id",
"child": { "resourceId": "CHILD-ID" },
"parent1": { "resourceId": "PARENT-1-ID" },
"parent2": { "resourceId": "PARENT-2-ID" },
"parent1Facts": [
{ "type": "http://gedcomx.org/BiologicalParent" }
],
"parent2Facts": [
{ "type": "http://gedcomx.org/BiologicalParent" }
]
}

Lineage Types (Parent-Child Fact Types):

Fact Type URIDescription
http://gedcomx.org/BiologicalParentGenetic/birth parent
http://gedcomx.org/AdoptiveParentLegally adopted
http://gedcomx.org/FosterParentFoster care relationship
http://gedcomx.org/GuardianParentLegal guardianship
http://gedcomx.org/StepParentStep-parent through marriage

Key Design Decisions:

  1. Each parent has separate lineage type — Parent 1 could be biological while Parent 2 is adoptive
  2. A child can have multiple parent sets — Biological parents AND adoptive parents each get their own relationship
  3. One parent can be unspecified — Single parent situations are supported
  4. No sibling relationship type — Siblings are derived from shared parents

GEDCOM 7 (released 2021, current version 7.0.16) is the file interchange format. It uses a hierarchical line-based structure.

Family (FAM) Record Structure:

0 @F1@ FAM
1 HUSB @I1@
1 WIFE @I2@
1 CHIL @I3@
1 CHIL @I4@
1 MARR
2 DATE 15 JUN 1952
2 PLAC Salt Lake City, Utah
1 DIV
2 DATE 1 MAR 1970

Individual (INDI) Record Structure:

0 @I1@ INDI
1 NAME John /Smith/
2 GIVN John
2 SURN Smith
1 SEX M
1 BIRT
2 DATE 1 JAN 1930
2 PLAC Boston, Massachusetts
1 FAMC @F0@
1 FAMS @F1@

GEDCOM 7 Relationship Links:

TagMeaning
FAMCFamily as child (links INDI to FAM where they are a child)
FAMSFamily as spouse (links INDI to FAM where they are a partner)
HUSBHusband/Partner 1 in family
WIFEWife/Partner 2 in family
CHILChild in family

Pedigree (PEDI) Values in GEDCOM 7:

ValueMeaning
ADOPTEDAdoptive parents
BIRTHFamily structure at time of birth
FOSTERFoster or guardian family
SEALINGLDS temple sealing (not birth parents)
OTHEROther relationship type (use PHRASE)

GEDCOM X is a modern JSON/XML data model, separate from GEDCOM 7. It’s used by FamilySearch’s API.

Key GEDCOM X Specifications:

SpecificationPurpose
Conceptual ModelCore data types (Person, Relationship, Source)
Fact TypesEnumerated facts for persons and relationships
Event TypesBirth, death, marriage, etc.
Date FormatFlexible date representation
JSON FormatJSON serialization
XML FormatXML serialization

GEDCOM X Relationship Types:

http://gedcomx.org/Couple
http://gedcomx.org/ParentChild

That’s it. Just two. All complexity comes from facts attached to these relationships.

AspectGEDCOM 7GEDCOM X
FormatLine-based textJSON/XML
PurposeFile interchangeAPI data model
Family UnitFAM record groups familyNo family entity; just relationships
MaintenanceFamilySearchFamilySearch
Current Version7.0.16 (March 2025)Stable

4.1 Multiple Parents (Adoption, Foster, Step)

Section titled “4.1 Multiple Parents (Adoption, Foster, Step)”

Scenario: A child has biological parents AND adoptive parents.

Solution: Create multiple Child-and-Parents relationships, each with its own lineage type facts.

Child-and-Parents Relationship 1:
- Child: John
- Parent1: BiologicalMother (BiologicalParent fact)
- Parent2: BiologicalFather (BiologicalParent fact)
Child-and-Parents Relationship 2:
- Child: John
- Parent1: AdoptiveMother (AdoptiveParent fact)
- Parent2: AdoptiveFather (AdoptiveParent fact)

Scenario: Mother remarries; child gains step-father.

Solution:

  1. Original Child-and-Parents relationship with biological parents
  2. New Child-and-Parents relationship with mother (BiologicalParent) and step-father (StepParent)

Scenario: Person has been married three times.

Solution: Three separate Couple Relationships, each with their own marriage/divorce facts and dates.

Scenario: Child has two mothers.

Solution: FamilySearch’s “Generic Relationships” update (2019) removed gender constraints. Use person1/person2 for couple relationships; both can have any gender.

FamilySearch handles this through:

  1. Confidence indicators on the relationship itself
  2. Multiple competing assertions from different contributors
  3. Discussion threads attached to relationships
  4. Source references with quality assessments

In GEDCOM 7, the FAMC.STAT (status) enumeration handles this:

ValueMeaning
CHALLENGEDLinkage is suspect but not proven/disproven
DISPROVENLinkage has been disproven
PROVENLinkage has been proven

Relationships support date ranges:

{
"type": "http://gedcomx.org/Marriage",
"date": {
"original": "about 1952",
"formal": "+1952"
}
}

Date modifiers in GEDCOM 7:

  • ABT - About (approximate)
  • CAL - Calculated from other data
  • EST - Estimated
  • BEF - Before
  • AFT - After
  • BET...AND - Between dates
  • FROM...TO - Date period

Every fact and relationship should have sources:

{
"sources": [
{
"description": "https://familysearch.org/ark:/...",
"attribution": {
"contributor": { "resourceId": "contributor-id" },
"modified": "2023-01-15T10:30:00Z"
}
}
]
}

GEDCOM 7 includes a QUAY (Quality of data) tag with enumerated values:

ValueMeaning
0Unreliable evidence or estimated data
1Questionable reliability (interviews, census, oral)
2Secondary evidence, recorded after event
3Direct and primary evidence

FamilySearch’s collaborative model uses voting/consensus rather than individual confidence scores.


  • OAuth 2.0 authentication required
  • Requires API key from developer program
  • Free for non-commercial genealogy use
EndpointPurpose
/platform/tree/persons/{pid}Read/write person
/platform/tree/couple-relationships/{crid}Read/write couple relationship
/platform/tree/child-and-parents-relationships/{caprid}Read/write parent-child relationship
/platform/tree/ancestryGet pedigree/ancestry
/platform/tree/descendancyGet descendants
  • application/json (standard JSON)
  • application/x-gedcomx-v1+json (GEDCOM X JSON)
  • application/x-fs-v1+json (FamilySearch extensions)

  • Uses GEDCOM for export but proprietary internal model
  • No public API for tree data (only DNA)
  • Likely similar two-relationship model internally
  • Family Graph API (REST, JSON)
  • Similar graph-based approach
  • “Theory of Family Relativity” for automatic relationship detection
  • Read-only API initially; limited write access

Neo4j is popular for genealogy because:

  • Relationships are first-class citizens
  • Avoids complex joins
  • Natural query patterns: “Find all descendants of X”

Common approaches:

  1. Simple model: married, child_of relationships
  2. Bipartite model: Person nodes + Family nodes
  3. All-person model: Direct person-to-person relationships

Based on this research, here are recommendations for our knowledge graph:

Recommended approach: Two base types with qualifiers

# Couple/Partner relationship
spouse_of:
from: person
to: person
properties:
- type: enum [marriage, civil_union, domestic_partnership, cohabitation]
- started: date
- ended: date
- end_reason: enum [divorce, annulment, death, separation]
# Parent-Child relationship
parent_of:
from: person
to: person
properties:
- type: enum [biological, adoptive, foster, step, guardian]
- started: date # adoption date, etc.
- ended: date # guardianship ended, etc.

8.2 Derived Relationships (Computed, Not Stored)

Section titled “8.2 Derived Relationships (Computed, Not Stored)”

These should be computed from the base relationships, not stored:

Derived RelationshipHow to Compute
sibling_ofShare at least one parent
half_sibling_ofShare exactly one parent
step_sibling_ofParents are spouses but children share no parents
grandparent_ofParent of parent
grandchild_ofChild of child
uncle_of / aunt_ofSibling of parent
cousin_ofChild of parent’s sibling
relationship:
id: nanoid
from_entity: entity_id
to_entity: entity_id
type: relationship_type
data:
subtype: string # biological, adoptive, etc.
started_at: datetime
ended_at: datetime
confidence: float # 0.0 to 1.0
status: enum # proven, challenged, disproven
sources: source_citation[]

Allow the same child to have multiple parent_of relationships with different parent pairs and types:

Person: John
← parent_of (type: biological) ← BiologicalMother
← parent_of (type: biological) ← BiologicalFather
← parent_of (type: adoptive) ← AdoptiveMother
← parent_of (type: adoptive) ← AdoptiveFather

Use neutral terminology (person1/person2 or just from/to) rather than gendered terms. The schema already supports this with spouse_of and parent_of.

Recommendation: Store as unidirectional, compute inverses

  • Store parent_of (parent → child)
  • Compute child_of (child → parent) as inverse
  • Store spouse_of once (person1 → person2)
  • Treat as bidirectional in queries

  1. FamilySearch Developer Documentation

  2. GEDCOM 7 Specification

  3. GEDCOM X Specifications

  1. FamilySearch Help Center

  2. Same-Sex Relationship Support

  1. MyHeritage

  2. Neo4j Genealogy

  1. Genealogical Proof Standard

  1. Simplicity wins: FamilySearch uses only TWO relationship types (Couple, Parent-Child) with qualifiers, not dozens of specific types.

  2. Facts modify relationships: The richness comes from facts/qualifiers attached to relationships, not from relationship type proliferation.

  3. Multiple parents are first-class: A child can have multiple parent-child relationships with different lineage types.

  4. Siblings are derived: No explicit sibling relationship — compute from shared parents.

  5. Source everything: Every conclusion needs source citations with quality/confidence indicators.

  6. Status for uncertainty: Use status fields (proven, challenged, disproven) rather than avoiding uncertain data.

  7. Gender-neutral design: Modern systems use generic terms to support all family structures.