citeready
Can AI assistants read, trust and cite your business page? Pure stdlib, zero dependencies, one command.
When someone asks ChatGPT-class assistants for "a good bakery nearby", the
answer is assembled from pages the assistant can actually read: structured
data, consistent contact details, plain crawlable HTML. citeready audits one
page the way an answer engine sees it and hands you a scored, explainable
report. Every check is a plain deterministic rule you can read in the source —
no model in the loop, no network calls beyond the page itself.
Install
pip install citeready
Usage
$ citeready https://vegabakery.example/
citeready — https://vegabakery.example/
score 96/100
Structured data
✓ JSON-LD structured data found (1 block)
✓ all JSON-LD blocks parse
✓ business node found (Bakery)
✓ name present
✓ address present
✓ telephone present
...
✓ phone matches the visible page
Page basics
✓ title: «Vega Bakery — sourdough & pastry in Valencia»
✓ meta description present
...
Site signals
✓ AI crawlers are not blocked
! no llms.txt (emerging, optional standard)
✓ sitemap.xml present
Also takes a local file (citeready page.html) or stdin (citeready -);
--json for machine-readable output, --strict to exit non-zero when any
check fails (handy in CI).
From Python:
from citeready import audit
report = audit("https://vegabakery.example/") # or audit(html_string)
report.score # 0–100
[(f.check, f.level, f.message) for f in report.findings]
What it checks
Structured data — the part assistants quote from:
- JSON-LD is present and parses (
@graphhandled) - a business node exists (
LocalBusiness/Organization/subtypes —Bakery,BeautySalon,LegalService, …) - must-have properties:
name,address,telephone,url(missing = fail) - rich properties:
description,geo,openingHours,sameAs,image,priceRange(missing = warn) - consistency: the name, phone and street from structured data actually appear on the visible page — mismatched data reads as unreliable
Page basics — title (present, sane length), meta description, exactly
one h1, lang attribute, canonical URL, no noindex, Open Graph pair.
Site signals (URL mode) — robots.txt does not block AI crawlers
(GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, …), llms.txt,
sitemap.xml.
Scoring is the plain weighted share: pass = 1, warn = ½, fail = 0, ×100. No hidden weights, so two reports are always comparable.
Honest limits
Static HTML only — no JavaScript is executed, so a page that renders its
content client-side will score poorly here. That is partly the point (most
answer-engine crawlers read static HTML too), but a low score on a
JS-heavy site deserves a manual look. Checks are heuristics with documented
thresholds, not a certification; robots.txt parsing is deliberately naive
(full-block detection, not path matching).
Scope is frozen
This package does one thing: it audits a page and reports. Bug reports (wrong counts, crashes on valid HTML, missed JSON-LD) are very welcome. Feature requests — crawling whole sites, fixing what it finds, tracking scores over time — are out of scope for now.
Built to power Laspi
citeready is the measuring half of the AI-visibility work inside
Laspi — a marketing employee in a small-business
owner's phone. Laspi keeps a living memory of the business (every fact
confirmed by the owner), writes platform-native posts, images and short
videos from it, and looks after the business's visibility in AI answers —
in whatever language the business sells in. This audit is how that work
starts: measure first, then fix.
The measuring is open source. The fixing is the product: laspi.pro.
License
MIT © 2026 GradeBuilder S.L.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file citeready-0.1.0.tar.gz.
File metadata
- Download URL: citeready-0.1.0.tar.gz
- Upload date:
- Size: 43.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a5a8a4331e93c7f33751049d0bee3e90299f4a355f731725d8197541a8af84a
|
|
| MD5 |
ee9e83bb55d8f25f2bae408b30ff9b7b
|
|
| BLAKE2b-256 |
7ef7715b41d6a8801065dc153bf35f77c3271a65a99742efe60c01579ebc35c6
|
File details
Details for the file citeready-0.1.0-py3-none-any.whl.
File metadata
- Download URL: citeready-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e1017d65fb66839a8d89cff49799188495d874fc0ec6f1710c96ec2c3c82a05
|
|
| MD5 |
b4319f42c6cbbc173b392ad61dce53ec
|
|
| BLAKE2b-256 |
0a50323621a9f0f7168d4e11f79a944cced9be3c7d5c29cf88131af67888c892
|