Methodology
Version 1.1.1, updated 11 September 2026.
What the score measures, and what it does not
It measures (A) what the seller itself discloses to a buyer before payment and (B) what of that, and about the seller, is confirmed in the country's official registers as of the date of the check.
It does not measure or assert construction quality, returns, reliability as a property of a company, intentions or the honesty of people. Buyer reviews are not scored. A low score means little was disclosed and little could be verified; it is not a statement that the developer is bad.
Money
Nothing is taken from a developer: not for listing, not for verification, not for leads, not for consultation, not for advertising. There is no card merchant. This is recorded in the machine-readable methodology as an invariant.
Sources and what they may demand
Every source records what it demands of the person asking. Only the first two levels may feed a card; a source that costs money or identity is not used at all, and the axis it would have fed leaves the country's denominator.
none— nothing — the open webaccount— an e-mail login, no documentspayer— a card payment in the payer's namenational-eid— a resident's electronic identityin-person— a visit in person or a local representative
Allowed for the public corpus up to account.
Which countries can be rated
A country enters when a free register of companies and a free register naming who built a finished building both exist at identity level account or below, and at least 60 % of the Layer B points it could offer are collectable free and anonymously, attributable completion among them.
Layer A — disclosure (50 points)
Read from the seller's own site. Each criterion has three states: published (found, with a quote, URL, copy and date), not published (the listed pages were checked on the date and it was not there — a fact about publication), and not checked (0 points, no finding).
| Criterion | points |
|---|---|
| Selling legal entity named sellerEntityNamed — the selling legal entity's full name and registration number | 12 |
| Payment protection stated paymentProtectionStated — a payment protection with a named institution or statutory scheme | 10 |
| Building permit published permitsPublished — a building permit number with its issuing body, and the type of land title | 8 |
| Delivery date and penalty published deliveryTermsPublished — a contractual delivery date and the penalty for delay, available before payment | 6 |
| Prices published pricingPublished — a price per home or per square metre and a payment schedule | 6 |
| Finished projects listed trackRecordAttributable — a list of finished projects with names, addresses, years and the entities that built them | 5 |
| Parent company named groupDisclosed — a parent or holding company named with its registration number | 3 |
Layer B — public record (50 points)
Read from Tier A registers only, and only once the selling legal entity is identified. An axis with no register in the country is excluded from the denominator for every seller. For one seller, not found in the register is 0 points with the status not verified — recorded as not found, never as absent.
| Criterion | points | Rubric |
|---|---|---|
| Entity continuity entityContinuity |
10 |
|
| Capital to project scale capitalToProjectScale |
6 |
registry.capital; A.pricingPublished == yes |
| Completion confirmed in the register completionVerified |
12 |
A.trackRecordAttributable == yes |
| Insolvency record of the seller and its group groupInsolvencyRecord |
8 |
|
| Payment protection confirmed by a register paymentProtectionVerified Not available in Bulgaria: there is no statutory escrow, guarantee fund or developer licence for off-plan sales, so this axis leaves every Bulgarian seller's denominator. |
8 |
|
| Permit confirmed by the register permitsVerified |
6 |
|
Composite, checked and confirmed, states, bands, rank
Two numbers describe how complete a card is. Checked measures us: the weight of criteria and axes in a determined state — published or not published, a registry record or a registry search that found none, an input the seller never published (no prices closes the capital axis, no attributable list closes the completion axis), or a registry that refused three dated attempts over a week — divided by the points available in the country. Only an axis we have not looked at is undetermined. An identified seller is scored only when checked is complete; until then the card is not published at all.
Confirmed measures the seller: the weight of Layer B axes a registry answered with a record, divided by the points available in the country. It is shown next to the rank and changes nothing in the score.
- scored — identified, every axis checked: 100 × (A + B) ÷ (50 + B available) − penalties, clamped to 0..100
- disclosure only — the selling entity not identified: A − penalties. Nothing in the public record can be attributed, so the ceiling is 38 — the absence of a verifiable public record is itself the main fact for a buyer
- no score yet — identified, an axis not yet checked by us: not published — no page, no row, no sitemap entry
A missing layer is not normalised away: a seller without a public record cannot score above about 38.
Bands
- from 75: Strong public record
- from 50: Adequate public record
- from 25: Limited public record
- from 0: Weak or unverifiable public record
Rank
Rank is within the country, by score; scored and disclosure-only sellers rank together, ties broken by disclosure points; sellers without a score have no rank. Coverage is always shown beside the rank. There is no rank across countries.
Fixed wording
The templates for a negative finding, the disclaimers, the band names and the label for an unidentified seller are fixed strings: English is the normative original, the market language carries an approved version. Each is listed in the allowlist of approved strings by its hash; a change goes through the changelog. Where they differ, the English text governs.
| String | English (original) |
|---|---|
| template.aVerifiedNo | We checked {pages_checked} on {date} and did not find {item}. If it is published elsewhere, use “Challenge this fact”. |
| template.bNotFound | {legal_name} ({reg_no}) was searched in {registry_name} on {date} by {search_key}; no record was found. Recorded as not found, not as a negative finding. |
| template.courts | {n} final judgments naming {legal_name} as a party were found in {registry_name} on {date} ({search_url}). Case types are not classified; this count does not affect the score. |
| template.rf6 | Registry status of {legal_name} ({reg_no}) is “{status}” as of {registry_date} per {registry_name} ({url}, retrieved {retrieved_at}). Units under the brand {brand} were offered for sale on {site_url} on {site_check_date}. |
| template.rf1 | {site_url} stated on {site_check_date}: “{quote}”. {regulator_name} lists no {scheme} for {legal_name} / {project} as of {registry_date} ({url}). |
| template.rf3 | Judgment {case_ref} of {court}, final as of {date}, against {legal_name} in a purchase-contract dispute ({url}). Status: {lifecycle_status}. |
| template.review | {regulator} announced on {date} a review concerning {subject} ({url}). No finding has been published. |
| disclaimer.1 | Not investment, legal or financial advice. |
| disclaimer.2 | Scores measure what the developer discloses and what can be verified in public registries as of the stated date. A low score means little could be verified; it is not a statement that the developer is bad. |
| disclaimer.3 | Unknown is never a negative finding. |
| disclaimer.4 | Every fact shows its source and retrieval date; any fact can be challenged via the form. |
| band | Strong public record |
| band | Adequate public record |
| band | Limited public record |
| band | Weak or unverifiable public record |
| label.disclosure_only | Public record not verifiable — selling entity not identified |
Red flags
A red flag comes only from a verified false statement or a final official event, only from a Tier A source, only with a provenance record, and only after a person has reviewed the evidence. Penalties are subtracted from the score, capped at -40; the floor is 0. Not a flag: a young entity, missing data, an investigation without a decision, a voluntary liquidation after completion, reviews, press.
| Criterion | Penalty |
|---|---|
| Payment protection stated on the site, not found at the named institution or register paymentProtectionClaimFalse | -15 |
| A project named as finished is recorded as not finished in the register completedProjectClaimFalse | -10 |
| Final judgment against the seller in a buyer's purchase-contract dispute adverseFinalJudgmentBuyerDispute | -10 |
| Insolvency proceeding with an undelivered project insolvencyWithUndeliveredProject | -15 |
| Sanction published by a regulator regulatorSanction | -15 |
| Selling entity not active in the register while units are on sale sellerEntityNotActive | -20 |
Lifecycle
A flag applies while its status is one of: final, opened; it is suspended while: appealed, pending; it is removed when: overturned, dismissed, expired. A removal opens a corrections-log entry by itself.
A card with any red flag, or whose selling entity is found not active, is not published until a person has opened its evidence and marked it reviewed.
How often facts are re-checked
- entity status: monthly
- insolvency: monthly
- courts: monthly
- completion: quarterly
- permits: quarterly
- the seller's site: quarterly
A fact past its window is marked "may be out of date" on the card. The seller's site is also re-read on every challenge.
Identification and the group
The registration number is the key. Without one, the exact legal name is searched and accepted only as a single match corroborated by the seat or the officers; with two or more candidates nothing is published and the seller is scored on disclosure alone. An event at a project company is a fact about that company; it reaches the brand only through entities linked on the seller's site or in the register by two or more shared officers or a shared shareholder. People are not published: names of directors, shareholders and beneficial owners are processed for linking only and reach no page, feed, export or structured data.
Right of reply, corrections, removal
The form is "Challenge this fact": a fact id, the value the challenger holds to be correct, a document, and a representative reachable at the company's own domain or its registered address. Acknowledged within 2 business days, decided within 10. Three outcomes and no fourth: corrected (a public log entry — before, after, basis, date); removed with a notice ("Card removed at the company's request on {date}. Methodology unchanged."); not substantiated (the reply names the document that would substantiate it). Scores are not discussed; nothing changes a score for money; no consultation is given to developers.
Cards removed at a company's request
0 of 68 cards in this register have been removed at the company's request.
Invariants
- no revenue from the companies rated
- no editorial axis — every value is a fact with a source
- no natural person's name on any public surface
- a negative finding only from a verified false statement or a final official event
- unknown is never a negative finding
- no aggregate-rating structured data
Structured data
A card carries an Organization (the developer: legal entity and registration number) and a Review by the publisher with the rating and the "why this score" line. The register page is an ItemList; the export is a Dataset.
Changelog
A published score changes only through an entry here (the method changed) or through the corrections log (a fact changed).
Methodology changelog
Semver. Methodology § 16: a published score changes only through an entry here (the method changed) or through the corrections log (a fact changed). Every entry is written in plain language — what changed, which cards moved, why — and is rendered on each site's methodology page from this file.
1.1.1 — 2026-09-11
No weight, threshold, rubric or flag changed. Every card keeps the points it had. What changed is who may be shown, how the gap in a card is measured, how the site's fixed wording is guarded, and who decides.
Two numbers instead of one. A card used to carry a single coverage figure, and a card under 75 % was held back as pending. That single figure counted a seller's own silence as our gap: a seller who publishes no prices closes the capital-to-scale axis, a seller who publishes no list of finished buildings closes the completion axis — and under the old rule both pushed the card into pending, so the least transparent sellers dropped out of the rating entirely. That is the same defect the method has now met four times (court counts, the delisting procedure, the insolvency row, and this): the opaque seller must never come out ahead of, or vanish beside, the transparent one. From this version checked measures us — did we finish every check the country's registries allow — and must be 1.0 for a card to score; an axis closed by the seller's own non-disclosure, or by a registry that would not answer three times over a week, counts as checked with zero points. confirmed measures the seller — how much of the public record a registry actually confirmed — and is the figure shown next to the rank. Cards that moved: in Bulgaria, most of the 44 cards that were pending under the old number are scored under the new one; their points did not move, their visibility did.
Pending is not published at all. No page, no row in the table, no sitemap entry, no noindex stub. A stub is a publication too.
The fixed wording is guarded by its hash, and the lexicon matches whole word forms. The approved templates, disclaimers, band names and policy texts are listed by SHA-256; the build no longer parses them word by word, so a forbidden term inside our own approved sentence cannot fail the build and cannot tempt anyone to rewrite the sentence around the gate. The lexicon matches word forms, not substrings — a forbidden Bulgarian adjective is not matched inside the longer, ordinary noun that happens to contain it. A forbidden term inside a quotation from a seller's own page drops the quotation, logs the term and keeps the evidence — the criterion still scores, because the fact rests on the URL, the date and the hash, and the quotation was only ever a display. Bulgarian versions of every fixed string are approved and used verbatim; English stays the normative original, shown once on the methodology page.
A link to a related company is a fact, with its own id. The continuity axis pays ten points for "linked in the register to the disclosed group", so a link without a fact behind it was a score derived from nothing. Every linked_entities[] entry now needs a legal_entity fact on the seller's record — the related company's number, registration date and status, and the counts of shared officers and shareholders, never names — or it is neither scored nor shown.
Officers' names are stored as salted hashes. Linking needs only equality, so the data holds a hash of the normalised name, never the name; the clear text lives in a temporary file during a linking pass and is not committed.
The human gate and the wave gate. "B1 = 0" in the human gate means found_inactive — a company found in the register and not active — and such a card must be checked for the sixth red flag (still selling under the brand), otherwise the gate held the card for a flag nobody looked for. A wave is published when six listed conditions are met, and a person is not one of them: no axis unknown in the wave roster, the known-leader test green, zero unreviewed flags and inactive-entity cards, imprint and policies live, a test letter answered from the corrections address, and the live-site check green including the forbidden-string gate.
The wave roster is picked by market presence and frozen before collection. Twenty to thirty sellers, chosen by how much they build in the city, written down with source and date before any collection starts. Picking by what we had already collected would rank only the sellers who disclose.
Money, stated at its real edge. Forbidden: payment from a rated company, from its broker or agent acting for it, or any payment that changes what a card says. Allowed and said plainly: a check commissioned by a buyer for their own purchase; labelled advertising by services that sell to buyers (lawyer, notary, escrow agent, surveyor, mortgage broker), only on the guide and check pages and never on a rating page, the index or a card; licensing the corpus. The offer is live from the first wave. The 90-day economic stop counter counts enquiries as well as payments, from the day the wave is published.
Gate 0 decides which asset a domain carries, not whether one is built. Tier 1: the gate passed, a full rating. Tier 2: the gate failed but sellers publish sites, a disclosure register — Layer A only, every card disclosure_only, a fixed notice on every page that the country's registries are closed to free checking — plus a guide and the check offer. Tier 3: no seller sites either, the domain is unused.
Who decides. From this version the operator owns the method. There is no approval loop and no memo asking anyone for a decision. An ambiguity is resolved by a five-step ladder — invariant, provenance, anti-inversion, publish less, reversibility — written as one line in decisions.md, and work never pauses for an answer.
1.1.0 — 2026-09-09
Three things changed, none of them a weight.
Where a fact may come from. Every source now carries what it demands of the person asking: nothing (none), an e-mail login (account), a card payment in the payer's name (payer), a resident's electronic identity (national-eid), or a visit in person or through a local representative (in-person). Only the first two may feed a card. A paid extract or an e-ID login leaves a record of who asked about which companies inside the country where those companies live — the one trail the publisher's whole design is built not to leave. So a source that costs money or identity is not budgeted; it is not used, and the axis it would have fed simply leaves the country's denominator, exactly as if the registry did not exist. No seller loses points for it. A paid document exists in one place only: the dossier a buyer orders under their own name for their own purchase. Every fact records its level in retrieval.identity, and a fact above account fails the build.
Which countries can be rated. Gate 0 now asks two questions instead of three: is there a free (or login-only) register of companies, and is there a free register that says who built a finished building — not just that a building stands at an address. Court portals no longer gate admission: courts left the score in 1.0.0 (§ 7), and what cannot move a score cannot decide a country. A country passes when at least 60 % of the Layer B points it could offer are collectable free and anonymously, completion with attribution among them. Spain fails this today (8 of 36 free); Bulgaria passes (Sofia first, because its attributable completion register is municipal).
One new row in B4. An insolvency proceeding that ended because the company performed its agreement with creditors, every resolution dated in the register, scores the full 8 points and raises no flag. It is shown on the card with its dates and case number. Without this row a company that went through insolvency and paid everyone back would be scored like an opaque liquidation for ever — the transparent loser to the opaque, a confound this methodology already removed twice. One Spanish card moves from "awaiting review" to this row; nothing else moves.
1.0.0 — 2026-09-07
Initial methodology. methodology.json is extracted verbatim from docs/handoff/devreg-methodology.md § 21 and is not edited by hand; a doctor check compares the two on every run.