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.
Metadata
Release files for citeready 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| citeready-0.1.0.tar.gz | 43.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| citeready-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.5 kB
Release files / citeready-0.1.0.tar.gz
| Download URL | citeready-0.1.0.tar.gz |
|---|---|
| Size | 43.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9a5a8a4331e93c7f33751049d0bee3e90299f4a355f731725d8197541a8af84a
|
|
BLAKE2b-256 checksum How to use checksums |
7ef7715b41d6a8801065dc153bf35f77c3271a65a99742efe60c01579ebc35c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / citeready-0.1.0-py3-none-any.whl
| Download URL | citeready-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8e1017d65fb66839a8d89cff49799188495d874fc0ec6f1710c96ec2c3c82a05
|
|
BLAKE2b-256 checksum How to use checksums |
0a50323621a9f0f7168d4e11f79a944cced9be3c7d5c29cf88131af67888c892
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|