Draft, pending review by a qualified lawyer. The bracketed items are the operator details still to be completed. This page describes what the code actually does, verified on 1 September 2026 — where practice and promise differ, we changed the code, not the words.
Gaps between what this page says and what the software does, found by reading the code on 2026-09-01. Classified using the method in Anthropic's claude-for-legal privacy-legal:policy-monitor skill: REQUIRED means the published text would contradict actual practice (material misrepresentation); ADVISABLE means the text is silent but defensible.
Bracketed tokens used on this page, all unfilled: [OPERATOR LEGAL NAME], [REGISTER OF INCORPORATION], [COMPANY REGISTRATION NUMBER], [REGISTERED ADDRESS], [VAT NUMBER], [VAT TREATMENT], [CONTACT EMAIL], [GOVERNING LAW], [LIABILITY CAP], [EFFECTIVE DATE]. The page is not valid until every one is filled and a lawyer has reviewed the result.
/for-salespeople publishes "You will never see one — not on a company page, not in the workbench, not in an export." True of the workbench (app/app/page.tsx:136), the CSV export (app/api/export/route.ts:116), company pages (lib/company.ts:185) and /live (app/live/page.tsx:407) — and false of /app/queue. lib/match.ts admits a company on email_kind='generic' OR phone IS NOT NULL, candidatesFor() selects the email unconditionally, and app/app/queue/page.tsx:154 renders it raw. ~175,831 rows in the candidate pool carry a personal address plus a phone. lib/supply.ts + /admin/supply do the same, admin-only. Three-line fix; do it before publishing. Section 8 above deliberately enumerates the surfaces that are actually gated and adds a use-ban on any personal address the user encounters, so this page is true today either way — but /for-salespeople still carries the absolute "never" and must be fixed or reworded in the same change.engine.opt_outs suppresses nothing in the served product. The table exists (db/schema.sql:223) and is written from /api/admin/optouts, but no query builder in lib/search.ts, lib/live.ts, lib/match.ts, lib/company.ts, lib/supply.ts or /api/export reads it. Section 7 now says suppression is manual and not to rely on us for it. Wire it, then strengthen the clause.app/api/claims/route.ts:33 hard-codes country = 'DK', so the claim form 404s on roughly 10.5M of 10.6M public company pages. AGENTS.md doctrine 2 requires a visible correction path on every published entity. Fix the route or the form, then delete the honesty note in section 15.lib/plan.ts sets api: true on Scale and the pricing page advertises it, but /api/company/, /api/companies/ and /api/stats are public and unauthenticated, /api/export is open to every signed-in salesperson including Free, and there is no API key, no key table and no per-plan API gate anywhere in app/ or lib/. Section 4 now says exactly that. Either build it or change the plan copy — the previous draft's claim that Scale's API "means the JSON endpoints served to your signed-in session" was false.lib/plan.ts advertises 2/5/25 seats on the paid plans; there is no team table in db/schema.sql and no invite flow. Section 3 says a plan is one login until one ships. The earlier draft promised "an additional account we set up for you by email" — that is an unbuilt manual process; it has been replaced with an agreement-in-writing clause that carries no turnaround promise./live only. contactsUnlocked() / CONTACT_PREVIEW_ROWS are referenced only from app/live/page.tsx. The signed-in workbench shows every generic email and phone to Free accounts unmasked, and company pages are open to anyone. The earlier draft's "full visibility of contact values in list views" as a paid-plan benefit was therefore wrong; section 4 now names /live, page 1, first ten rows./api/export limits the query to the remaining allowance rather than refusing, so a request for more rows than remain returns a silently truncated file. Section 4 discloses it; a row-count warning in the UI would be better.[LIABILITY CAP] also cannot be set sensibly before the entity and its insurance are known. Do not guess.lib/site.ts still exports corrections@berry.example. Replace it with [CONTACT EMAIL] in the same change that publishes this page, or section 15 and the footer's "report a wrong record" link both point at a placeholder domain.docs/country-roadmap.md and /for-salespeople — the operator's own prior research. No legal-research connector was available. [verify] on every one, and the section 7 preamble now says so on the page.[verify]docs/money.md as a plan). Every "we will email you" in sections 9, 14 and 17 is a manual act by the operator. Keep them only if the operator will actually do it; each is paired with a page notice or a reply route so the commitment does not depend on unbuilt machinery./legal/terms (and /legal/privacy, /legal/cookies) to app/sitemap-static.xml/route.ts — it currently lists only /, /for-salespeople, /live, /pricing — and link them from the "about" column of components/SiteFooter.tsx in the lower-case footer idiom. The cross-links in sections 1, 8 and 14 point at /legal/privacy and /legal/cookies; those pages must exist before this one goes live or the terms reference documents that 404.