Trust and integrity
For readers who want to check the numbers for themselves: where each one comes from, what it has been tested against, how often the underlying data is wrong (measured by hand on a random sample), and what we know is not yet right.
This release
- Release
- 2026-10-02b
- Built
- 2026-10-02 from code commit
3089af9 - Data taken
- 2026-10-02T07:07:34Z from the production database, as a reduced copy (see "Extract" below)
- Licence
- CC BY 4.0
Every release is dated and never changed. A new release is built from a fresh copy of the data; the figures and downloads always say which release they come from.
The checks, and this release's results
Each check is a question the data must answer "nothing wrong" to. It passes when it finds no rows; when it fails, it returns the rows that are wrong and by how much. A known failure with an understood cause is declared, with its reason and a date by which it must be fixed; after that date it counts as a failure again.
| Check | What it asserts | Result | Rows failing |
|---|---|---|---|
composition__notice_types | composition: every notice has one of the known notice types (the twelve seen in the extract of 28 Sep 2026) | PASS | 0 |
coverage__weekly_gazette | coverage: no gap of more than 10 days between consecutive national gazette issues (a missing week of the Gazette itself) | DECLARED | 4 |
distribution__office_share_jump | distribution: no office's share of a year's accounts jumps more than threefold and by more than 2 points over the year before (offices with 30 or more accounts that year; below that, shares are noise) | PASS | 0 |
freshness__latest_issue | freshness: the latest issue is within 21 days of when the extract was taken | PASS | 0 |
magnitude__notices_per_year | magnitude: no complete year (48 or more weeks of national gazettes) holds under half the median complete year's estate notices | PASS | 0 |
reconciliation__notice_issue_exists | reconciliation: every notice points at an issue the extract holds | PASS | 0 |
relational__account_after_first_notice | relational: an estate's account is never dated before its first notice to creditors | DECLARED | 50 or more (the full count is in the declaration) |
Known issues and declared differences
| Check | Why it fails | Declared | To be fixed by |
|---|---|---|---|
coverage__weekly_gazette | The archive is thin before June 2012 (33 issues that year) and three weeks are missing from it (May 2014, July 2015, January 2017); not yet checked against the Government Printing Works list. | 2026-09-28 | 2026-10-31 |
relational__account_after_first_notice | 2,604 of 425,812 linked estates (0.6%) have an account dated before their first notice to creditors (extract of 1 Oct 2026). At least 391 are two estates linked as one: a date of death after the account. The rest are not yet explained. | 2026-10-01 | 2026-11-30 |
Where each figure comes from
| Figure | Where it appears | How it is computed | Status |
|---|---|---|---|
| Estates advertised in the last five years with no account yet, by how long | /analysis/backlog#open-estates | gazette/analysis/figures/open_stock.sql | solid |
| Open estates at each Master's office, by the time since their notice to creditors | /analysis/backlog#open-by-office | gazette/analysis/figures/open_stock_by_office.sql | solid |
| Estates with no account five years after their notice to creditors | /analysis/backlog#open-long | gazette/analysis/figures/open_long.sql | solid |
| How many estates reach their account within six months, a year and two years | /analysis/backlog#completion | gazette/analysis/figures/completion_curves.sql | solid |
| New estates and estates reaching their first account, nationally | /analysis/flows#national | gazette/analysis/figures/flows_national.sql | solid |
| Account notices printed for each office in the twelve months to each month, later accounts included | /analysis/flows#per-office-out | gazette/analysis/figures/flows_per_office_out.sql | solid |
| New estates by office in the twelve months to each month, from 2023 | /analysis/flows#per-office-in | gazette/analysis/figures/flows_per_office_in.sql | solid |
| Accounts published each quarter by each office, with Thohoyandou picked out | /analysis/flows#by-quarter | gazette/analysis/figures/accounts_by_quarter.sql | solid |
| Accounts published by each office against the same months a year earlier | /analysis/flows#year-on-year | gazette/analysis/figures/accounts_year_on_year.sql | solid |
| Time from notice to creditors to account, by office | /analysis/offices#first-notice-to-account | gazette/analysis/figures/first_notice_to_account.sql | solid |
| Median time at each step, year by year | /analysis/journey#steps | gazette/analysis/figures/journey_steps.sql | solid |
| From a death to the notice to creditors | /analysis/journey#death-to-notice | gazette/analysis/figures/journey_death_to_notice.sql | solid |
| From the notice to creditors to the account | /analysis/journey#notice-to-account | gazette/analysis/figures/journey_notice_to_account.sql | solid |
| Each step, office by office | /analysis/journey#by-office | gazette/analysis/figures/journey_by_office.sql | solid |
| field coverage | /analysis/integrity#parse-quality | gazette/analysis/figures/field_coverage.sql | solid |
| Who is named as executor on the notice to creditors | /analysis/executors#named-on-notice | counts from a read sample, gazette/analysis/data/executor_sample_counts.csv (method) | solid |
| Who lodges the estate's first account | /analysis/executors#lodged-account | counts from a read sample, gazette/analysis/data/executor_sample_counts.csv (method) | solid |
How completely each notice is read
The share of notices with each field read, by year and form. An account does not print the date of death, so it shows 0% there. The office shows 0% on a notice to creditors because there it is read from the place printed after the date of death, which this chart does not count; most notices to creditors print it since 2023. Recent years link fewer notices because their accounts are not published yet.
The measured error rate
240 notices drawn at random, 40 for each form in each of the Gazette's three layouts, each checked by hand against its printed page in October 2026. An error is a value stored wrong, missed, or stored where nothing is printed. A right value carrying stray characters is counted apart as minor. Intervals are 95%.
| Field | Checked | Errors | Error rate | 95% interval | Minor |
|---|---|---|---|---|---|
| Form (J193 or J187) | 240 | 0 | 0.0% | 0.0% to 1.6% | 0 |
| Estate number | 240 | 1 | 0.4% | 0.1% to 2.3% | 19 |
| Surname | 240 | 1 | 0.4% | 0.1% to 2.3% | 0 |
| Given names | 240 | 1 | 0.4% | 0.1% to 2.3% | 40 |
| ID number | 237 | 2 | 0.8% | 0.2% to 3.0% | 0 |
| Date of birth | 238 | 3 | 1.3% | 0.4% to 3.6% | 0 |
| Date of death | 120 | 2 | 1.7% | 0.5% to 5.9% | 0 |
| Master's office (accounts) | 115 | 1 | 0.9% | 0.2% to 4.8% | 37 |
| Executor | 238 | 4 | 1.7% | 0.7% to 4.2% | 64 |
| Layout | Notices | With an error | Share | 95% interval |
|---|---|---|---|---|
| legacy 2012-2015 | 80 | 10 | 12.5% | 6.9% to 21.5% |
| numbered 2015-2020 | 80 | 0 | 0.0% | 0.0% to 4.6% |
| current 2021-2026 | 80 | 2 | 2.5% | 0.7% to 8.7% |
The free-text layout of 2012 to July 2015 is read least well. The sample's notice ids and every verdict are in gazette/analysis/data/error_check.csv.
The pipeline, for data engineers
- Discovery and download. A daily job lists new issues on the Government Printing Works site and archive; each PDF is stored with its source URL, byte count, SHA-256 and download time (
issuetable). - Text. Each PDF is converted to text page by page (
pdftotext, layout mode), with page numbers kept so every notice can be traced to its page. - Segmentation and parsing.
gazette/scripts/worker_parse.pyfinds each notice's start by the form's numbered fields, then reads each field by the form's layout (several eras of layout since 2012, each with tests). Every issue is scored after parsing: if the share of notices with an office, ID number or date drops below a floor for that form, the parse is flagged for review (parse health). - Canonicalisation. The printed Master's office is mapped to one of sixteen offices by tiered rules (
gazette/app/master_offices.py): the office after the word "Master", else the last office named; magistrate towns only when no office is named. - Pairing. Notices of one estate (the notice to creditors and its accounts) are linked by estate number and the deceased, into an estate page.
- Extract.
gazette/analysis/extract.pycopies a reduced projection of the notices to a separate database. It reads these personal columns: the deceased's identity number, date of birth, date of death and place of death, the spouse's name and identity number, and the executor's name and address. The date of death is copied as printed. The rest are read only to derive sex (from the identity number), birth year, age at death, whether a spouse is named, the Master's office named in the place of death, and the executor's kind and, where the executor is a firm, the firm's name (a private executor becomes "individual"); they are never copied. The printed office and the executor's agent are copied as free text, with any ID-shaped number or email dropped on the server. Every file is scanned before loading. - Checks.
gazette/analysis/checks/*.sql, seven categories, run against the extract; results and declarations go into the release. - Release.
gazette/analysis/release.pyruns one SQL file per figure (gazette/analysis/figures/) and writes a dated, never-overwritten directory of CSVs and a manifest. The pages read the release; nothing queries a database when a page is viewed. - Tests. A seeded-defect corpus (
gazette/analysis/corpus.py) plants one fault per check category; each check must catch exactly its own. The whole suite runs on every change.
Reproducing a figure
Each figure's computation is a single SQL file, listed above. With the public Gazette issues and the steps above, anyone can rebuild the numbers; the aggregate data for each figure is downloadable under CC BY 4.0.
Who runs this, and corrections
The analysis is free and carries no advertising. GazetteSearch is run by Phase Transitions (Pty) Ltd, which also offers businesses a paid bulk-matching service. To report an error, write to the contact address in the footer; corrections are made to the next release and recorded on Method and limits.