FamilySearch Integration with Gramps

Hello!

I’m glad y’all liked the plugin. I’m also in talks with Gordon, great guy. I’ll be posting the source probably next week, just need to clean up some stuff.

6 Likes

Here it is (:

as far as a proof of concept goes I think it’s viable…who knows, maybe MyHeritage next?

5 Likes

See the existing implementation for Myheritage by VaZaR00

Your demo looks good but I use windows 10 so it does not work :frowning:

3 Likes

Nick, this is something a lot of people are interested in. I do have a couple of suggestions that could make the process even smoother:

  • Auto-import basic information: If a user has already linked their FamilySearch ID, it would be incredibly helpful to automatically import their core information at the start of their initial research. This would save countless hours and prevent users from having to rebuild everything from scratch.

  • Duplicate detection and merging: Adding a feature that can identify and merge duplicate FSIDs would streamline the workflow and prevent confusion caused by repeated records.

These improvements could make the user experience much more efficient and intuitive.

2 Likes

Hi!

I think your suggestions are good. Bulk importing families and children/spouses/parents is definitely possible. I also considered adding a feature that checks the “last modified date” attribute of each Person’s imported source from FamilySearch, and then make a report telling you which sources have been updated/modified since you last imported it. A “sync this person with familysearch” button would be good as well.

All that being said, the reason I didn’t add any bulk import features or automatic syncing is because I personally only like to add people to my GRAMPS tree with verified data/information. Since FamilySearch is open for public collaboration, yes you can gain lots of information from searching, but there also may be information added by someone else that’s incorrect. Or (and this has happened to me many times using FamilySearch) someone merges your Person with someone else that has a similar name, or the Person has two+ wives with the same name but different IDs, and so on. I created the add-on to simplify the importation process, but ideally I’d be meticulously reviewing/correcting the information on FamilySearch before importing it into Gramps, if I import it at all. Since these changes can happen at any time, if there’s an auto sync, I imagine you would open up your family tree one day and find a lot of pertinent information suddenly missing or a lot of incorrect information synced. Though, there should be a way to automate checking if there were any changes to any given Person since the last time they were added/synced.

I worry as well how this would impact FamilySearch’s servers if you’re asking for a tree-wide “compare” on a tree with 1000+ or 2000 people linked. As it stands it takes a few seconds depending on total source quantity and information to build the compare window, per Person. 2000+ people would take a while…

I built this add-on based on my personal workflow, which is to use Gramps for verified data & private information & more personal photos, MyHeritage/Gramps Web/Ancestry for sharing with friends & family, and FamilySearch (among other sources) for research & public collaboration.

4 Likes

Hate to be picky, but shouldn’t that read, “there also may will be information added by someone else that’s incorrect.” :winking_face_with_tongue:

3 Likes

Maybe for such importation, we could assign a tag to objects (person, family, event, etc.)

Should not be too difficult to add something like:

import time
from gramps.gen.config import config
from gramps.gen.lib import Tag

if config.get('preferences.tag-on-import'):
    pref = config.get('preferences.tag-on-import-format')
    default_tag = time.strftime(pref)
else:
    default_tag= timelog
...
with DbTxn("blabla import", db) as tran:
....
if db.get_tag_from_name(default_tag):
    tag = db.get_tag_from_name(default_tag)
else:
    tag = Tag()
    tag.set_name(default_tag)
    db.add_tag(tag, tran)
    event.add_tag(tag.handle)
    db.add_event(event, tran)
...
if gobj.__class__.__name__ == 'Person':
...
    db.commit_event(event, tran)
    gobj.add_tag(tag.handle)
elif gobj.__class__.__name__ == 'Family':
...
place_tag = _('place from abcdefghijklmnopqrstuvwxyz.abc')
etc.

So, we can check objects without merging action.

I have created GEPS 046 - FamilySearch Integration to document our discussions.

1 Like

I’d like to see something akin to the FamilySearch interface for source attachment or Merging. It would be familiar and intuitive for users of FamilySearch.

In it, there is an originating data on the left aligned with destination data on the right. And you can swap which is originating vs. destination with a single click.

Identical data is just shown for reference. But data elements that have no corresponding (or different) data have the ability to:

  1. accept the different originating data element and overwrite the destination
  2. manually edit the destination data with the originating data as a visible reference
  3. ignore the originating data element

Before the change is applied to the destination tree, a “reason” must be stated. (There are some prefills suggestion selections that you can flow in and edit.)

The right sidebar has a navigation reference section that lets the user drill down (invoking a pop-up window) to explore either side. This allows you to verify that you’re not making a mistake without abandoning your progress in the Merge/Attachment.)

2 Likes

Hey nick apologies, I cant seem to log on to the page you had created and gave a link to, however, I do have just 2 suggestions:

Proposed Feature: Automatic Event Import for Already-Linked FamilySearch IDs

Summary
If a person in the database is already linked to a FamilySearch ID but has no events—or only basic events like Birth and Death—allow the system to automatically import additional events from FamilySearch. This would save significant time and reduce the need to manually review each person one by one.

Details

  • Provide an Auto-Import Events option (similar to features found in Ancestral Quest, RootsMagic, and Legacy).

  • Currently, if a person already has a FamilySearch ID attached, the user must manually import events; this slows down workflow for large trees.

  • Maintain the existing protection that prevents overwriting corrected data:

    • If Birth or Death information has been manually corrected by the user and differs from FamilySearch, do not auto-import or override those fields.

Additional Feature: Skip Verified Generations
Allow users to mark a family line or generation as “verified” or “complete.”

  • Once a group of individuals is marked as verified, the system should skip importing or updating data for those specific IDs, even when doing bulk imports from someone else’s tree.

  • The exception would be new individuals not yet in the user’s tree, who should still be imported.

1 Like

4 posts were split to a new topic: Problem accessing Gramps web site

Hi @clarkegj,

as the maintainer of the web version of Gramps (Gramps Web, https://www.grampsweb.org/), I’d be very much interested to discuss integration with FamilySearch for Gramps Web as well. Since it’s based on the same core Python library as Gramps (desktop), we’ll likely be able to share most of the code, but the details of the user-facing implementation will be different, as it’s a browser-based application.

Since you mentioned GEDCOM7, it may also be worth mentioning that I’m currently involved in some efforts to bring GEDCOM7 support to Gramps, see

3 Likes

Hello - Yes very Interested In Gramps FS integration.

Linux Mint 22.2 Gramps 6.0.6 inside Pipx (CLI)

I am new (1 week) to Gramps about 3 Years doing Research - Almost exclusively within FS - i also use Findagrave sometimes Ancestry (library) FindMyPast (Military Records Nov 11). Also i have a local HD file system for my trees that holds my media (photos documents) . Much of my gramps learning so far has been solo fumbling and Ai based learning. As painful as it has been this software is exactly what i want. Once i get over the learning curve. I would greatly benefit from spending some time reading this post and the forum at large.
As many have mentioned there are numerous problems and benefits within FS. I wont discuss them at present. here is my limited journey. Attempting to go from FS to Gramps. Likely easier ways.

My intention - Duplicate as much of my FS tree that i can into Gramps

my data -
1 used getmyancestors with good success went up about 8 generations from myself and used the coding Ancestors - 1 Decedents - 10 (FSids = x16 ged about 10-15k people) many which where duplicates as they got closer to the common decedent me. It was very good at providing an accurate export of FS - while it does this it creates its own @ idid @ an@ famid @ famid @ to keep everything cohesive. The Problem i encountered is when i tried to merge various ged exports.

2 tried mergemyancestors not ideal - some things broke @ id 1@ for example and my grandpa was @ id7 @ coming from different ged.

3 my Solution Python converted @ id @ to _FSFTID with _ instead of - for compatibility.

3a imported converted ged to gramps - used fix tool export as .gramps no compression. (this step seemed to solved other issues encountered when importing straight multiple ged - the relationships and other references seemed to get jumbled.

4 imported all 16 .gramps xml into gramps 1st instance of converted FSFTID gramps respected the change 2nd instance it treated person as new created I00001 etc

5 Attempted to use tools and Gramplets that i could find - generic find duplicates worked although required manual (unacceptable for my situation) Discover Import and merge a Gramps XML Addon:Import Merge Tool - Gramps great tool not for my needs but opens my eyes to possibilities. Another MultiMergeGramplet from Isotammi project addons was great to merge the worst ones who had 16 scattered ID into my primary FSid. It did however create duplicates within the ID like birth x 16 also required manual entry of who. However most of mine where single duplication. i wanted a bulk process that would automate without causing more problems. simple i thought &%$* not so easy.

6 Created my own Gramplet using Ai to help navigate the python (incredible what it {deepseek - chatgpt - gemini} you can do with persistence) many failures many hours. Eventually after some learning some trial and error.

7 now enjoying creating gramplets for whatever i want - although likely duplicating what might exist already.

Success - I now have a gramps tree that includes many subtrees the id match FS and the relationship are clean (well as clean as FS is) - we will see as i investigate further to see perhaps some things are broken.

Unique solution for my situation. Although severely problematic and unnecessarily difficult many times i was tempted to use a paid software (rootsMagic) that i believe does this preloaded.

Long Story short - I wish there was something in gramps that can automate this - as I discovered not an easy thing to do. I will continue to educate myself and learn from previous posts here. Also would be nice to contribute where i can.

WdP aka DiG

1 Like

When I try to login i keep getting this error message and have to force stop Gramps.

47405: ERROR: grampsapp.py: line 187: Unhandled exception
Traceback (most recent call last):
File “/home/moorob/gramps/gramps/gui/viewmanager.py”, line 557, in login
session.get_token(auth_code)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File “/home/moorob/gramps/gramps/gui/fs/session.py”, line 199, in get_token
raise FSException(“Authorization error”)
gramps.gui.fs.session.FSException: Authorization error

Did you consent to Gramps accessing your account? You should have been directed to the permissions page in your Web browser.

You can check this by logging into your FamilySearch account on their beta server and then looking in the “Permissions” tab in your “Settings”. Click your account name/avatar.

Getting the token is the last stage in the process. Are you able to put a couple of debug statements into the code? It would be interesting to know the contents of “auth_code” and “data”.

@moorob Try again now. I have uploaded a fix.

I was unable to reproduce the problem, but I think that it could be that you are being redirected to a login page rather than the authorization page.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.