Lead-Routing Neutrality
The principle
Among the agents eligible for a lead, none is ranked higher because they paid more — every ranking key is Agent Quality Score or current workload, never a payment signal. Eligibility is a separate question and payment does decide it: we route only to agents on a paid plan or an unexpired trial, and this charter states that rather than let the word "neutrality" imply otherwise.
The commitment
RESPA + FTC + state broker laws prohibit pay-to-play in lead distribution. This charter is written to be checked against the code, so it states what payment does as well as what it does not.
WHAT PAYMENT DOES NOT DO. It never moves one agent ahead of another. No routing query sorts on subscription tier, credit balance, a Stripe identifier, or any paid-placement signal.
WHAT PAYMENT DOES DO, STATED PLAINLY. A single shared predicate (lib/leads/routing-gate.ts) decides who is eligible for a lead at all, and its final clause requires an agent_pro/pro subscription or an unexpired trial. An agent who is active, accepting leads, licence-verified and under capacity still receives nothing once that clause fails. Measured against production on 2026-09-19: of the four agents passing every other clause, one held a paid plan, none held a live trial, and three were excluded by that clause alone. Describing this as neutral without disclosing it is the misreading this paragraph exists to prevent.
HOW ELIGIBLE AGENTS ARE ORDERED. Four routing paths are live and they use two orderings, neither of them payment. /api/match/connect-agent and lib/leads/match-agents.ts rank by Agent Quality Score descending, with agent id as the tie-break. lib/auto-match-agents.ts — the matcher behind the property "request info" form — ranks by fewest current active leads, and lib/leads/match-agents.ts sits behind /api/v1/leads/capture. /api/leads/submit ranks by average rating, then years of experience. AQS itself is computed from connection-lifecycle data only: response rate, acceptance rate and follow-through rate, cohort-adjusted and exponentially time-decayed. Beyond the eligibility clause described above, subscription tier gates FEATURE access (CRM, advanced market intelligence) and never rank.
WHAT THIS CHARTER USED TO SAY. Until 2026-09-19 it asserted that routing was decided by Agent Quality Score and by nothing else, and it did not mention the eligibility gate at all. Both halves were false against the code: two of the four paths do not rank on AQS, and payment decided who entered the pool. The retracted sentence is deliberately not reproduced word for word on this page. It is read by machines that lift sentences out of their frame, and a false claim quoted inside its own correction is still a false claim in the extract. The correction is recorded; the wording it replaces is not re-published.
Why this matters
When agents pay for better placement, buyers get matched to whoever paid most rather than whoever fits best. That is bad for buyers, who get worse outcomes, and bad for the platform, whose feedback signal is then corrupted by billing. So payment is kept out of every ranking key — and the one place it does operate, whether an agent is in the pool at all, is disclosed above instead of being left for a buyer to discover. A charter that omitted that clause would be the pay-to-play problem wearing a neutrality label, which is worse than having no charter.
How we enforce
__tests__/monetization-firewall.test.ts, run by .github/workflows/ci.yml on every push to main and every pull request against it, statically scans the scoring paths for pay-to-play tokens and asserts that the ORDER BY clause of each of the four live lead-routing queries — /api/match/connect-agent, /api/leads/submit, lib/auto-match-agents.ts and lib/leads/match-agents.ts — contains no payment field. A routing file that cannot be read fails the test rather than passing it silently. The test deliberately does NOT assert anything about the eligibility gate in lib/leads/routing-gate.ts: that gate is the disclosed product rule described above, and a test that hid it would defeat the disclosure. The repository is private, so the enforcing file is named rather than linked.
Aligns with
- RESPA 12 CFR 1024
- FTC Section 5 (Unfair/Deceptive)
- NAR Code of Ethics Article 6
Last reviewed and affirmed: 2026-09-19. The charter is versioned with the codebase — a Git history of changes to lib/charters.ts serves as the audit log.