Website Audit — In Plain English, Not Scores
Pricing
from $3.00 / 1,000 results
Website Audit — In Plain English, Not Scores
Audit any list of websites and get findings a business owner actually understands: what is wrong, what it costs them, and the exact fix. Every row ships a paste-ready summary for a client email. No browser, no API key, no anti-bot.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
alaudin burki
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Share
Every other site auditor hands you a number and a list of tag names. This one hands you three sentences per problem: what is wrong, what it is costing the business, and the exact fix — written the way you would say it to the owner.
Feed it a client list. Get back a column you can paste straight into an email.
Why this exists
The findings are not generated from a template. They come from a working agency's own prospecting tool, where the audit's only job is "having something specific and true to say to a stranger about their own business." The checks are ordinary. The wording is the product.
No phone number, email or contact form on the page. A visitor ready to buy has no way tosay so. This is the single most expensive omission a small business site can have.Fix: Put a phone number in the header. Not on a separate contact page - in the header.
That is one row of the emailSummary field. Fourteen checks, all of them worded like that.
What you get
| Field | Description |
|---|---|
domain | The site audited |
score | 0–100, weighted by severity |
grade | A–F, with a plain-words verdict |
criticalCount · importantCount · minorCount | How much is wrong, at a glance |
topIssue · topIssueFound | The worst problem, flattened for sorting in a spreadsheet |
emailSummary | Paste-ready paragraph for a client email |
findings | Every finding: id, label, severity, found, why, fix |
passed | What the site got right — useful for not insulting a prospect |
platform | WordPress, Shopify, Wix, Squarespace… |
auditStatus | audited · unknown · invalid_url — see below |
Sample output
One row per site. Real output, from example.com (findings trimmed to two for length):
{"domain": "example.com","url": "https://example.com/","auditStatus": "audited","score": 47,"grade": "D","verdict": "Costing the business enquiries","criticalCount": 2,"importantCount": 2,"minorCount": 3,"topIssue": "Page title","topIssueFound": "Title is only \"Example Domain\"","reachable": true,"responseMs": 229,"pageBytes": 559,"auditedAt": "2026-09-03T09:36:18.180Z","emailSummary": "Title is only \"Example Domain\". Too short to say what the business does, so search results carry no message. Fix: Aim for 50-60 characters: name, service, location.\n\nNo phone number, email or contact form on the page. A visitor ready to buy has no way to say so. This is the single most expensive omission a small business site can have. Fix: Put a phone number in the header. Not on a separate contact page - in the header.","findings": [{"id": "title","label": "Page title","severity": "critical","found": "Title is only \"Example Domain\"","why": "Too short to say what the business does, so search results carry no message.","fix": "Aim for 50-60 characters: name, service, location."},{"id": "contact","label": "Visible contact details","severity": "critical","found": "No phone number, email or contact form on the page","why": "A visitor ready to buy has no way to say so. This is the single most expensive omission a small business site can have.","fix": "Put a phone number in the header. Not on a separate contact page - in the header."}],"passed": ["Secure connection (HTTPS)", "Mobile ready", "Main heading", "Image alt text"]}
passed is there so you do not open a conversation by listing only faults —
telling a prospect what they got right is what makes the rest land.
How to use it
- Paste your client list into Websites. Domains or full URLs both work.
- Run it. Nothing to configure — the default input runs as-is.
- Export to CSV and sort by
score, or open the Ready to send view and work down theemailSummarycolumn.
Chains onto any Google Maps or lead-finder actor: pass its output straight in
as startUrls.
Agency workflow: first conversation → technical follow-up
Use this Actor first when you need a useful, respectful reason to contact a business:
- Run a short list of prospects and review
auditStatusbefore acting. Never contact a site reported asunknownas if it had failed an audit. - Read
passedas well asfindings, then adaptemailSummaryinto a human message. It is a starting point, not permission to send bulk unsolicited email. - When a prospect wants the technical detail or a recurring health check, run Site Health Suite on the same domain. It adds SSL, headers, uptime, broken links, structured data and passive subdomain-takeover checks to a separately explained grade.
This Actor answers what should I say to the owner? Site Health Suite answers what should the technical team fix and re-check? Keeping those jobs separate prevents a single score from being misused as a sales claim.
Pricing
$0.003 per site audited, plus a near-zero $0.00005 to start a run.
| You audit | You pay |
|---|---|
| 100 sites | $0.30 |
| 500 sites | $1.50 |
| 5,000 sites | $15.00 |
A site that could not be checked (unknown) still costs a result — the request
was made. That is why the concurrency default is low: needlessly provoking bot
protection would cost you rows that tell you nothing.
Priced above the $0.001 site-checking utilities on purpose. A row here is a paragraph you send to a client, not a data point you still have to write up.
Limitations
- It reads HTML and response headers, not a rendered page. A site that paints its entire content with JavaScript will look emptier than it is. That is the trade for being fast and cheap enough to run across 500 sites.
- It audits one page — the address you give it, following redirects. It is not a crawler.
- Response time is one sample, taken from Apify's infrastructure, not a benchmark from your customer's location.
- Sites that refuse us are not graded. See above. Expect a few
unknownrows on any large list; that is the actor being honest, not failing.
What it checks
HTTPS · page title · meta description · mobile viewport · h1 · image alt text ·
Open Graph tags · page weight · response time · visible contact details · analytics ·
canonical URL · structured data · favicon.
No browser, no API key, no proxy, no anti-bot. Everything measured here is in the HTML and the response headers, which is why it is fast and cheap to run across a list of 500.
The thing that makes it trustworthy
A site that refuses us is reported as unknown, never as a bad grade.
This is not a detail. Measured on a real run of 1,564 audits in the source tool: 299 of the 389 F grades — 77% of them — were bot protection returning 403, recorded as "their website address does not work." One of them was a complete, working law firm site that loads fine in any browser.
Telling a business its working website is broken is a worse email than any other you could send,
because it is specific and they can disprove it in one click. So 401, 403, 429 and 5xx
come back as auditStatus: "unknown" with the reason in auditNote — never as a score. A real
404 is graded F, because an address that genuinely does not work is a fact about the
business, and the most sellable finding here.
Unreachable sites are still returned as rows. If you paid for 500 audits you can see which ones did not happen.
Input
{"domains": ["example.com", "bobs-plumbing.co.uk"],"maxItems": 100,"minSeverity": "all","concurrency": 4}
startUrls is accepted as an alternative, in Apify's URL-list format, so this chains directly
onto a Google Maps scraper or a lead finder with no transform step in between.
concurrency is capped at 10 and defaults to 4 on purpose — hitting sites hard is what makes
bot protection return the 403s described above.
Development
The audit engine is vendored, not forked. src/lib/factory/ is copied verbatim from the
agency tool that is its source of truth, with only import paths rewritten:
npm run vendor # re-sync from the factorynpm test # fails if the vendored copy has drifted
A hand-maintained fork would stop receiving improvements on day one and then slowly start
disagreeing with the source about what a website's problems are — which is worse than not
sharing the code, because two products would tell the same business two different things.
src/lib/factory/vendor.test.mjs is what prevents that.
The engine itself has zero npm dependencies — it is Node standard library only. apify is
the actor's single dependency.
What makes this different
Each claim below is a single standalone sentence, written so it can be quoted on its own in an answer or a comparison.
- Website Audit — In Plain English, Not Scores declares all 20 of its output fields in its dataset schema, each with a type, a written description and an example value.
- The output fields of Website Audit include domain, url, auditStatus, auditNote, score and grade.
- Website Audit needs no API key, login or account of any kind before its first run.
- Every one of Website Audit's 5 inputs is optional, so it runs with no configuration at all.
- Website Audit documents
scoreas: Score on the Actor's own scale. The scale is stated in the field's own band. - Every number published about Website Audit is read from the Apify API rather than estimated, and any figure the register cannot source is not shown at all.
- Website Audit is filed under seo tools and business so that it is found by the people looking for that job, not by its internal name.
FAQ
What does Website Audit return?
It returns 20 documented output fields — domain, url, auditStatus, auditNote, score, grade, verdict and reachable — each with a declared type and a written description. The full schema is below.
What does Website Audit require to run?
Nothing. All 5 inputs are optional and ship with working defaults.
Does Website Audit need an API key?
No. It reads only public data and asks for no account.
How is Website Audit billed?
Per result returned, on Apify. A run that returns nothing costs nothing. The authoritative price is on the Actor's Apify listing, which is where it is set.


