Page reviews — the critic on any URL
Erdo builds landing pages against a body of conversion-rate knowledge, and grades its own builds with a dedicated critic — a fresh-context discriminator that reads the rendered page and reports the concrete ways it loses visitors. A page review points that same critic at any public URL. You hand it one or more landing pages — your own, a competitor’s, an agency client’s — and it returns typed findings: what each page does well, and where it leaks conversions, with the reasoning and the pixel evidence behind every claim. This is the same critic that grades Erdo’s own pages, not a separate prompt that happens to look similar. It is grounded in the one shared conversion-rate corpus the page builder also builds against, so when that knowledge improves, the reviews improve with it — there is no second critic to keep in sync.What you get back
A review returns one entry per URL, and each entry is structured, not prose:- Context — the critic’s committed one-sentence reading of what the page is selling, to whom, and at what stage, inferred from the captures alone. Every finding is judged relative to this reading, because the right form of each principle is category-relative: a pre-construction residence cannot have resident reviews, and its third-party proof is a named developer track record, an independent certification mark, or press — not star ratings. Surfacing the reading lets you challenge the premise, not just the findings.
- Strengths — what the page genuinely does well against the conversion principles (a clear outcome-headline, proof above the fold in the strongest form the category can truthfully possess, one strong repeated call-to-action).
- Defects — each a claim you could defend to a skeptical client:
- issue — what is wrong, naming the specific element.
- basis — how strongly the violated principle is known, as a typed field:
measured_prior,replicated_finding, orcraft_prior. A measured prior cites a real experiment corpus with a number (headline priors are mined from 29,423 statistically confident pairwise outcomes across 11,915 real Upworthy A/B tests), a replicated finding has been observed repeatedly across published CRO practice, and a craft prior is stated as exactly that. The critic never invents a study or statistic: a justification is only ever as strong as it truthfully is. - because — the reasoning: the specific conversion principle the element violates and why it costs this page conversions, carrying the measured prior’s number when there is one.
- evidence — the one observation the claim hinges on: the element or quoted copy and which viewport it was seen at. Deliberately minimal — the captures accompany the report, so evidence exists to let you locate and falsify the observation, not to narrate the page.
- fix — the minimal change the evidence entails, left empty when the evidence dictates no obvious one (the critic is a discriminator, not a designer).
- viewports — the capture labels (
desktop-fold,desktop-full,mobile-fold,mobile-full) where the defect is observable, declared by the critic. A UI uses them to place each finding next to the exact capture it cites, instead of guessing from the evidence text. - Each defect carries a severity —
high(broken or the conversion path materially damaged),medium(noticeably weakens conversion), orlow(minor polish).
- Captures — the screenshots the critic actually judged the page from, one per viewport
(
desktop-fold,desktop-full,mobile-fold,mobile-full). Each carries a stablebucket_keyand a signedurlyou can render directly. The signed URLs expire after about an hour and are minted fresh on every read, so treat them as short-lived — re-GETthe review for new ones rather than storing them. The captures let a report reader see what the critic saw, and, paired with each defect’sviewports, anchor the finding to the frame it came from.
The scores
Every reviewed page carries a conversion score (0–100) with a four-way breakdown, and — when available — its real Lighthouse scores. The scores are arithmetic, not opinion. Each of the four principle families — Clarity, Credibility, Action, and Friction — starts at 100 and subtracts a fixed cost for each of its findings: 18 for ahigh, 8 for a medium, 3 for a low, floored at 5 (each defect names
its family, and a family with no findings stays at 100). The page’s headline score is the mean
of those four family scores — the breakdown you see genuinely composes the number above it. That
makes every score exactly explainable (“Credibility is 82 because of one high finding”), stable
(identical findings always produce identical scores), and honest about movement: nothing changes
unless the findings change. The review as a whole carries the rounded mean across its pages.
The lighthouse block is the genuine article: Google Lighthouse category scores
(performance, accessibility, best_practices, seo, each 0–100) measured through PageSpeed
Insights on the mobile strategy. It appears when the measurement succeeds and is simply absent when
it doesn’t — a review never fabricates a Lighthouse number.
Tracking a page over time
GET /v1/page-reviews lists past reviews, newest first, as lean summaries — id, status, the
reviewed URLs, and the scores, without the findings (those stay on the single-review read). Pass
url to see every review that included one exact page, which is how you watch a page’s score move
as it changes:
How it sees the page
The critic never guesses from source; it judges what a visitor actually sees. Each URL is captured at four frames: the fold and the full page, on desktop (1280×800) and on a phone (390×844). The fold shots — exactly what shows before scrolling — are where the most damaging, most-missed defects live: a headline clipped on mobile, a call-to-action pushed below the fold. The full-page shots walk the entire scroll height, so “there’s nothing below the hero” is a finding grounded in the whole page, never an artifact of a capture that couldn’t scroll. A defect that only appears at one width cites the viewport it was seen at, so you know whether it hits desktop, mobile, or both. Only publichttp(s) URLs are reviewed. A private address or a signed-in Erdo workspace URL is
refused — the renderer is anonymous and would only capture a login screen; publish the page and pass
its public URL instead.
Declaring the goal and the audience
The pixels tell the critic what the page is; they can’t tell it what the campaign is for or who it is aimed at. So a review takes two optional declarations, each up to 500 characters:goal— what the page is trying to achieve (“book qualified demos”, “build launch awareness”). A page built for brand awareness and one built to book demos can look almost identical, yet the right findings differ — the awareness page is not defective for lacking a hard-conversion call-to-action, while the demo page lives or dies on form friction and CTA clarity.audience— who the page targets, your ICP (“out-of-state condo investors buying pre-construction”, “ops leads at 50–500-person logistics firms”). The critic then judges clarity, proof, and tone through that reader’s eyes: what they must grasp in five seconds, which proof forms they weigh, what tone earns their trust. Without it the critic infers the audience from the page — and hedges when the page itself is ambiguous about who it’s for.
Running a review
A review is asynchronous: you submit URLs and get a review id back immediately, then read the findings once they land. A single unreachable URL never sinks the review — it reports its own reason while the other pages still return findings. Ask an agent in a thread:“Review these three landing pages and tell me which one is weakest and why.”Or run it directly:
erdo_review_pages (start) and erdo_get_page_review (read). All three surfaces
return the review id immediately; the status moves pending → capturing → reviewing → ready (or
failed if not one page could be captured).

