Website Audit — In Plain English, Not Scores avatar

Website Audit — In Plain English, Not Scores

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Website Audit — In Plain English, Not Scores

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

alaudin burki

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

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 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.

That is one row of the emailSummary field. Fourteen checks, all of them worded like that.

What you get

FieldDescription
domainThe site audited
score0–100, weighted by severity
gradeAF, with a plain-words verdict
criticalCount · importantCount · minorCountHow much is wrong, at a glance
topIssue · topIssueFoundThe worst problem, flattened for sorting in a spreadsheet
emailSummaryPaste-ready paragraph for a client email
findingsEvery finding: id, label, severity, found, why, fix
passedWhat the site got right — useful for not insulting a prospect
platformWordPress, Shopify, Wix, Squarespace…
auditStatusaudited · 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

  1. Paste your client list into Websites. Domains or full URLs both work.
  2. Run it. Nothing to configure — the default input runs as-is.
  3. Export to CSV and sort by score, or open the Ready to send view and work down the emailSummary column.

Chains onto any Google Maps or lead-finder actor: pass its output straight in as startUrls.

Pricing

$0.003 per site audited, plus a near-zero $0.00005 to start a run.

You auditYou 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 unknown rows 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 factory
npm 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.