Import your MyHeritage family tree, photos, and DNA-confirmed matches into your self-hosted ɳFamily instance. Keep your genealogy data on your own server without abandoning the research you have already done on MyHeritage.
Requires nself-family. Uses the MyHeritage Research API (OAuth 2.0). DNA match data requires a MyHeritage DNA plan — the importer stores match summaries only, not raw genotype data.
nself license set nself_pro_...
nself plugin install family family-myheritage
nself build
nself startnself-family-myheritage connects to the MyHeritage Research API using OAuth 2.0 and imports your family tree. Persons map to np_family_members; parent, spouse, and sibling relationships map to np_family_relationships. Vital facts (birth, marriage, death dates and places) are stored on the member record.
MyHeritage supports multiple trees per account. The importer defaults to the account's primary tree but you can specify any tree by ID. Photos attached to persons and tree documents are downloaded into MinIO when nself-photos is installed.
DNA match data (relationship estimate, shared cM, predicted relationship) can optionally be imported for MyHeritage DNA subscribers. Match summaries are stored in np_myheritage_dna_matches linked to the corresponding local family member if a match exists in your tree.
| Variable | Required | Default | Description |
|---|---|---|---|
PLUGIN_MYHERITAGE_CLIENT_ID | Yes | — | OAuth client ID from the MyHeritage Developer Center |
PLUGIN_MYHERITAGE_CLIENT_SECRET | Yes | — | OAuth client secret |
PLUGIN_MYHERITAGE_TREE_ID | No | primary | MyHeritage tree ID to import. Defaults to the account's primary tree. |
PLUGIN_MYHERITAGE_SYNC_INTERVAL_HOURS | No | 24 | How often to sync. Set to 0 to disable automatic sync. |
PLUGIN_MYHERITAGE_IMPORT_PHOTOS | No | true | Download person and tree photos into MinIO. Requires nself-photos. |
PLUGIN_MYHERITAGE_IMPORT_DNA | No | false | Import DNA match summaries. Requires a MyHeritage DNA subscription. |
| Endpoint | Method | Description |
|---|---|---|
/myheritage/auth | GET | Begin OAuth flow. Redirects to MyHeritage login. |
/myheritage/callback | GET | OAuth callback. Stores tokens and triggers first import. |
/myheritage/import | POST | Trigger a manual import. Body: { tree_id? } |
/myheritage/trees | GET | List trees available on the authenticated MyHeritage account |
/myheritage/status | GET | Last sync time, person count, DNA matches imported |
/myheritage/dna-matches | GET | Paginated DNA match list. Query: ?linked_only=true to filter to local members only. |
/health | GET | Plugin health check |
| Table | Purpose |
|---|---|
np_myheritage_tokens | OAuth access + refresh tokens per user |
np_myheritage_person_map | Maps MyHeritage person IDs to local np_family_members IDs |
np_myheritage_dna_matches | DNA match summaries: match_id, predicted_relationship, shared_cm, confidence, linked_member_id |
np_myheritage_sync_log | Import history: started_at, tree_id, persons_imported, dna_matches_imported, errors |
| Event | Payload |
|---|---|
myheritage.import.completed | Tree ID, persons added, DNA matches imported, duration |
myheritage.auth.revoked | User ID — sync paused until re-auth |
List your MyHeritage trees before importing to confirm the correct tree ID:
# 1. Authorize
open https://your-nself-host/myheritage/auth
# 2. List available trees
curl https://your-nself-host/myheritage/trees \
-H 'Authorization: Bearer <token>'
# 3. Import a specific tree
curl -X POST https://your-nself-host/myheritage/import \
-H 'Authorization: Bearer <token>' \
-d '{"tree_id": "987654"}'| Feature | nself-family-myheritage | MyHeritage only | GEDCOM export |
|---|---|---|---|
| Self-hosted | Yes | No | Yes (one-time) |
| DNA match data | Yes (summaries, opt-in) | Yes (on MH only) | No |
| Automatic sync | Yes | N/A | No |
| Multi-tree support | Yes | N/A | One at a time |
| Symptom | Fix |
|---|---|
| DNA import returns 403 | The MyHeritage DNA endpoints require a DNA plan on the account. Confirm the account has an active DNA subscription and the OAuth scope includes read:dna. |
/myheritage/trees returns empty list | The OAuth token may have been issued before the tree was created, or the account has no trees. Re-authorize via GET /myheritage/auth to get a fresh token. |
| Photos missing after import | MyHeritage photo downloads require PLUGIN_MYHERITAGE_IMPORT_PHOTOS=true and nself-photos installed and healthy (nself status). |
Port: 3833 | Bundle: ɳFamily ($0.99/mo) or ɳSelf+ ($3.99/mo) | Last Updated: May 2026 | Plugin Version 1.0.13