Marketing-Site Authenticity Audit — Agent Skill
Audit a company's own marketing website — its case studies, testimonials, gallery, and hero claims — for fabrication and misrepresentation, and remediate to honest equivalents. The target is the company's self-representation, not a third party. Where [[verification-audit]] checks whether an OSINT claim about someone else is true (via external registries), and [[conversation-review]] checks an AI agent's chat output against logs, this skill checks whether a marketing site's images and testimonials actually match what they claim.
Borrow [[verification-audit]]'s confidence-tier ladder and strike-through retraction audit trail as the spine. The novel, uncovered core here is fetch-and-compare on the site's own media assets, reused-photo dedup, fabricated-testimonial detection, and the honest-generic remediation doctrine.
When to use this skill
- Pre-launch honesty review of a marketing site (especially service-business sites with 'our work' / case-study sections).
- Case studies or testimonials look too polished, too specific, or mismatched.
- The site makes an authenticity claim ('real photos only', 'no stock photos', 'verified reviews') you should check against the assets.
- You are about to schema-ify reviews ([[local-business-aeo-schema]]) and must confirm they're real first.
Do NOT use this skill for:
- OSINT claims about THIRD parties (registrations, partnerships, financials) → [[verification-audit]].
- An AI agent's conversational output vs activity logs → [[conversation-review]].
The fabrication pattern catalog
| Pattern | What it looks like | How to catch it |
|---|---|---|
| Stock/generated-as-'exact job' | A stock or AI image captioned 'this exact [city] job' | Fetch the image; is it a generic/stock/AI asset, not a jobsite photo? |
| Image↔caption mismatch | Caption describes X; image shows Y | Fetch the image and compare content to the caption |
| One photo, many 'exact' jobs | The SAME photo used for multiple different captioned jobs | Cross-image dedup (hash/visual compare) across all case studies |
| Invented testimonial | A 'Google review' pull-quote with city-only attribution, no real author | Cross-check the quote + attribution; is there a real author / source? |
| Over-claim | 'No stock photos' / '100% real' contradicted by the assets | Test the claim against the fetched assets |
Verification mechanism — fetch and compare (the core)
Unlike external-lookup verification, here you fetch the subject's OWN media assets and compare each to its claimed caption:
# 1) enumerate case-study images + their captions from the page HTML
# 2) fetch each image attachment
# 3) compare content to caption; 4) hash to find reuse
import hashlib, requests
seen = {}
for img_url, caption in items:
data = requests.get(img_url, timeout=20).content
h = hashlib.sha256(data).hexdigest()
if h in seen:
print('REUSED across jobs:', seen[h], 'and', caption) # one photo, many 'exact' jobs
seen[h] = caption
# then: does the image content match `caption`? (view the image, compare to the claim)
For each image, view it and ask: does it match the caption, is it stock/AI, and is it claimed as a SPECIFIC job? For each testimonial: is there a real author and source, or is it a city-only-attributed pull-quote?
Confidence + retraction spine (from verification-audit)
Tag each claim: Verified (image matches caption, real author) → keep; Suspect (mismatch / stock / city-only) → flag; Fabricated (reused-as-different-job, invented quote, over-claim contradicted by assets) → retract with a strike-through audit-trail line noting the original claim and why it fails. Preserve the trail so the remediation is reviewable.
Remediation doctrine (honest-generic)
- Case studies → reframe fabricated 'this exact [city] job' into honest GENERIC examples ('example of a typical X project'); never claim a stock/AI image is a specific job.
- Ratings/reviews → keep ONLY where real (real author + verbatim body); delete invented pull-quotes.
- Gallery → real photos only.
- Generated illustrations → allowed, but NEVER captioned as a specific real job; label them as illustrative.
- Over-claims → drop the claim ('no stock photos') or make it true.
Recipes
- Enumerate every case study, testimonial, gallery image, and authenticity claim, with its caption/attribution.
- Fetch + compare each image to its caption; hash all images to surface reuse (mechanism above).
- Verify testimonials — real author + source, or city-only invented.
- Tier + retract using the verification-audit spine.
- Remediate per the honest-generic doctrine; produce a diff of claim → honest replacement.
- Re-check the authenticity claims hold after remediation (e.g. if you kept AI illustrations, is 'no stock photos' now removed?).
Pitfalls
- Auditing text only. The lie is usually in the IMAGE vs its caption — you must fetch and view the asset, not just read the copy.
- Missing reused photos. Hash/compare ALL images; the same photo captioned as two different 'exact' jobs is the tell.
- Deleting real reviews to be safe. Keep genuinely real reviews (real author + verbatim body) — over-retraction is its own dishonesty. Only retract the fabricated ones.
- Banning AI illustrations outright. They're fine as illustrations — the violation is CLAIMING one is a specific real job. Relabel, don't necessarily remove.
- Leaving a now-false authenticity claim. If you keep AI illustrations, a 'no stock photos / all real' claim must go.
- Confusing this with third-party verification. Don't reach for external registries — the source of truth is the site's own assets vs its own captions.
Combining with other skills
- [[verification-audit]] — the confidence-tier + strike-through retraction spine this reuses.
- [[conversation-review]] — the sibling for AI-agent conversational honesty.
- [[local-business-aeo-schema]] — only schema-ify reviews this audit confirmed are real.