Genealogy software · free (MIT) · Windows · macOS · Linux

famrecon
Families from church register tables.

Anyone who transcribes church registers ends up with tables: one row per baptism, marriage and burial. famrecon turns them into families, person by person, with source citation and reason on every link. What is not unambiguous stays open and goes to a review list.

Version 0.1.6 of 7 October 2026 · work in progress · English and German

Performance

What famrecon handles

The entire holdings of the Kies family archive, almost 242,000 church register entries from 32 parishes in the Zabergäu and Stromberg area of Württemberg, were reconstructed in 25 minutes – locally on an ordinary desktop computer, without artificial intelligence and without a cloud. All 32 runs completed without a single failure.

241,958entries in 32 parishes
594,175mentions of persons
356,336persons, 170,902 families
25 minlargest parish Bönnigheim: 27,310 entries in 6½ min

The program runs on your own computer, without a service on the net. Every run is reproducible: the same tables give the same result, link by link and open to checking.

A single village in detail. The church registers of Cleebronn in the Zabergäu, transcribed by Dr. Otfried Kies, cover 250 years. famrecon read the tables without any change to the program and linked them on an ordinary desktop computer.

13,658entries, 1560–1808
19,048persons
8,915families, 6,253 with children
99 sreading 6 s, linking 93 s

For a village family book (Ortsfamilienbuch) this means: the tedious work of assigning every baptism to the right family is done by the computation. The author only decides the cases that are genuinely open, and sees for every link why it was made.

A second opinion on existing family books. famrecon can cross-check an existing reconstruction. In the Kies archive it revealed links that were missing there:

Anna Hannaman, buried 1614, is the Anna Hanneman baptized in 1583. famrecon connects the two through a phonetic key that treats spelling variants as equal; the archive had two persons.
Johann Philipp Wölfflin, buried 1759 aged ten. Several children bore the same name; famrecon found the right one through the father named in the burial entry, the baptism of 1749.

These findings went back into the archive. Across all 32 parishes, 2,318 more deceased are now linked to their baptism, and contradictions between age at death and baptism fell from 47 to 17. Every difference between two reconstructions is a question to both, and the answers can be counted.

For anyone who has registers in tables. Every author keeps tables differently. famrecon proposes the column mapping itself, from headers and sample values, with a confidence level per column. xlsx with several sheets, several files or CSV all work. It replaces the old route via spreadsheet macros: no Excel licence, minutes instead of days.

Method

From table row to family

  1. RegistersThe tables of the transcription, one row per baptism, marriage, burial. Nothing is rewritten beforehand.
  2. Normal formEvery person named is parsed: surname, given name, occupation, annotations. Phonetic key for spelling variants, birth year from the age.
  3. LinkingAll entries in chronological order. Points for agreement, fixed rules exclude the impossible.
  4. ResultPersons and families, every link with a level: certain, probable or new.
  5. OpenIf two candidates fit equally well, there is no guessing. The case goes to the review list.
  6. ReviewWhoever knows the registers decides the open cases. The decision holds for every new run.
  7. OutputGEDCOM with a source citation on every event, plus a book in the style of a village family book.

computed by fixed rulesdeliberately left opendecided by hand

No guessing. If two persons fit equally well, or a veto speaks against an otherwise matching candidate, the case stays open. It goes to the review list with all candidates and their evidence. Whoever knows the registers decides there or in an Excel sheet, and the decision holds for every further run.

Nothing gets lost. A check chain finds every table row again in the finished GEDCOM by its source citation. The raw value of every cell is kept alongside the normal form; differing spellings become additional names.

The output can be read by Gramps, Ahnenblatt, webtrees and the online village family books of the German Verein für Computergenealogie. Anyone working with webtrees can continue editing the result directly in wtWin.

Rules

Points, thresholds and exclusions

famrecon works without artificial intelligence and without statistics in the background. There is a handful of fixed numbers and rules, all collected in one place in the source code and fully described here. Whatever cannot be expressed with them is not forced by a new rule but goes to the review list.

1. Who is a candidate at all?

The entries are processed in chronological order, baptisms, marriages and burials mixed; on the same date the marriage comes before the baptism and the baptism before the burial, and a missing month or day counts as mid-year. So each entry can only link to what came before. For every person named, famrecon looks for the persons known so far whose surname sounds the same. To do so, every surname gets a phonetic key (Kölner Phonetik, a German counterpart to Soundex): Haag and Hag, Hanneman and Hannaman, Kiefer and Kieffer get the same key. Given names are brought to a standard form, such as Nicolaus and Nikolaus or Hanß and Johann.

2. Points for agreement

Every candidate collects points for what fits:

FeaturePointsExplanation
Given name equal100after the standard form
Given name partly equal40 – 90call name first (Jacob = Jacob Friedrich) 90, last (Jacob = Johann Jacob) 80, two names in common 70; if the common name is only Johann, Anna or Maria, 60 or 40
Birth date exact100documented baptism and calculated birth on the same day
Birth year equal50birth year from the age given at burial
Birth year close30up to five years off
Named father fits30e.g. the father in a child's burial
Named mother fits50
Named spouse fits50
Surname spelled identically20not just sounding the same
Death date = back reference200the baptism row already notes the death date, the burial confirms it

3. Threshold and lead

A candidate is chosen only if it has enough points and is clearly ahead of the second best.

SettingValueMeaning
Threshold, general100below it, a new person is created
Threshold, burial80burial entries often lack details
Threshold, spouse and earlier marriage50the marriage itself is already a strong anchor
Lead for “certain”50plus an anchor beyond the name
Lead for “probable”30below it, the case counts as a tie and stays open

This gives the level of every link. Certain: besides the name a further anchor fits, such as mother, spouse or date, and nobody is close behind. Probable: surname and given name fit, no serious rival. New: first mention of a person, or deliberately left open. The level later appears on every link in the GEDCOM file and in the book.

Worked example, schematic: A burial names “Johann Georg, 10 years, father Hans Haag”. Two baptized Johann Georg Haag are possible. The same surname gives both the same points and is left out here.
Candidate A, baptized in the calculated year, father Hans: given name 100 + birth year 50 + father 30 = 180 points.
Candidate B, baptized three years earlier, different father: given name 100 + birth year close 30 = 130 points.
Both are above the threshold of 80, A leads by 50 points and has an anchor in the father: certain A. Had the father not been named, it would be 150 to 130, a lead of only 20 points: open, both candidates go to the review list.

4. Time windows

Besides points, time counts. Every candidate must fit a window, otherwise it is excluded, however well the name matches:

WindowValueEffect
Father's age at baptism16 – 75excluded outside
Mother's age at baptism15 – 50excluded outside
Age of bride and groom14 – 80excluded outside; between 18 and 32 there are 10 extra points, so that among namesakes the 23-year-old comes before the 39-year-old
Adult rolefrom 14anyone younger cannot be father, mother, bride or groom; and anyone who already appeared as an adult cannot have been born afterwards
Birth from stated age± 1 / ± 5 yearsup to one year off 50 points, up to five years 30 points, more than five years excluded
Lifespan0 – 100an event before birth or after the hundredth year is excluded
Death before the event—anyone already buried no longer appears; the father may be named up to one year after his death (posthumous child)
Mother dead before baptism1 yearif the wife died more than a year before the baptism, this family is excluded
Marriage after baptism—a marriage concluded only after the baptism cannot be the parents' family
Span of children in a family22 yearsbetween first and last child; more is excluded
Child burialunder 15is linked to a baptism only if an anchor fits: birth date, father or back reference

One case is relaxed: if the parents of an adult are named, for example in the burial of an old man, his birth year is often unknown. Then famrecon does not check the father's age, allows a father who has already died, and widens the span of children to 37 years, since the parents are usually long dead by then.

5. Exclusion rules (vetoes)

Before points count, candidates that are impossible by fixed rules are excluded. famrecon counts in every run how often each rule applied.

RuleMeaning
Age outside the rolefather 16 to 75, mother 15 to 50, bride and groom 14 to 80 years at the event
Younger than 14 in an adult roleas father, mother, bride or groom under 14
Older than 100over a hundred years old
Already deadalready buried at the time of the entry; exception: the father of a posthumous child
Birth more than 5 years offbirth calculated from the age and documented baptism are too far apart
Born after first appearancethe person already appeared as an adult before they could have been born
Sex contradictsman and woman do not match
Given name contradictsno name part in common
Mother contradictsthe named mother does not match the wife of this family
Wife died before the baptismshe cannot be the mother
Marriage after the baptismthis family's marriage took place only after the baptism
Span of children exceededmore than 22 years would lie between first and last child
Different fatherthe person already has parents, and the named father has a different surname
Is the father, not the sonthe candidate is married to the named mother
Burial: single, father contradictsthe named father of an unmarried person does not match the family found
Burial: married, no spouse fitsthe named spouse matches none of the person's marriages
Burial: child without anchora child burial without date or parents is not linked to a baptism

If a veto speaks against a candidate that otherwise fits well and has an anchor, it is not discarded; the case stays open. A person left in twice is easy to merge later; two people wrongly merged into one are hard to find again.

6. Where the numbers come from

Points, thresholds and vetoes were tuned on about 2,800 real church register entries. Every change to a rule is measured against these and against the fictitious Falkenrath family tree before it stays; automated tests enforce the lower limits. The complete source code is open on GitHub.

Measurement

How famrecon is tested

You cannot tell by looking whether a reconstruction is right. famrecon therefore measures itself – and the numbers say exactly as much as their measurement allows.

On fictitious data. From the fictitious Falkenrath family tree with 492 persons, baptism, marriage and burial registers are generated, famrecon computes them back, and the result is compared with the original. It finds 152 of 153 couples and assigns 331 of 337 children correctly. That tests the mechanics; real church registers are messier.

On a real register. Does famrecon recognize that a burial belongs to a particular baptism? On the register it was tuned on, about 500 such pairs: in 92 of 100 cases the link made is correct, and of 100 actual pairs it finds 89. This is not an independent test and says nothing yet about parents, marriages and children. An independent measurement at a second place, including the assignment of parents, is under way.

The comparison also turned up links that are missing from the hand-checked family book and can be confirmed in the church register: even a checked family book is one reading. With the command vergleiche (compare), every author can measure famrecon against their own family book before trusting it.

Download

Windows, macOS and Linux

Latest version on GitHub Source code and guide

Windows as a single file, macOS as an app bundle, Linux as .deb or single file; with Python 3.11 also via pip install. The interface runs in the browser, but only on your own computer: the data never leave it. On Windows and macOS the system warns once about the unknown publisher. The program speaks English and German.

Status: work in progress. The chain from reading to GEDCOM is complete and measured. What small examples do not show, only large real registers reveal – feedback from authors with their own tables is very welcome: thomas@bgg-mail.de.