FIRST CHApps

First CH Apps / FAQ vs Site Consistency Checker

FAQ vs Site Consistency Checker

Enter the URL of an FAQ or help page and up to three pages of your main site (pricing, company info, shopping guide…). We fetch each page on our server, pull out prices, business and support hours, phone numbers, dates and periods such as "within 7 days", and show side by side where the same topic carries different values. It is meant for finding FAQ answers left behind after a price change or new support hours.

It does not draft corrections or summarise anything — it only shows where the values differ. It does not crawl either: only the (up to four) pages you enter are fetched, once each.

Pick pages that talk about the same things as the FAQ: pricing, company info, shopping guide, contact page and so on.

How it is judged

We read only the text of each page's HTML (no script, style or comments). Full-width digits and symbols are normalised, so "1,000円" and "1,000円", "03-0000-0000" and "(03) 0000-0000", "9時〜18時" and "9:00–18:00", "2 weeks" and "14 days" count as the same value.

Each value gets a topic from the words around it in the same sentence, or from the previous line (an FAQ question or table header) — e.g. returns, shipping fee, support hours, holiday closure. Starting points such as "after delivery" or "of purchase" are not treated as topics. For prices, "… plan" names are used too; when both sides name a plan, only the same plan is compared.

A mismatch is a value in the FAQ that does not appear among the site's values for the same kind and topic. The site having more values (a pricing table with several plans) is not a mismatch.

When tax-inclusive and tax-exclusive are stated, they are converted before comparing (¥1,000 excl. tax matches ¥1,100 incl. tax). A date without a year matches when month and day agree.

Values with no topic word nearby are not compared ("¥1,000" alone does not say what it is for). Phone numbers are the exception and are compared as "Phone".

Limits: text rendered later by JavaScript, text inside images or PDFs, and pages behind a login cannot be read. Day qualifiers (weekdays, weekends) are shown but not used in the comparison. Treat the results as pointers and have someone confirm what is correct.

SERVER PROCESSING — what we send and what we keep

Sent: only the URLs you type (one FAQ page, up to three site pages). Our server (Cloudflare Workers) fetches each once as a public page. Links are not followed.

Stored: nothing. The comparison lives entirely inside one request and writes neither the URLs, the fetched content nor the result to any database (no KV, no D1). It leaves memory when the request ends.

Returned: the values we found and excerpts of a few dozen characters that show where they are. We never re-serve the fetched HTML, so this app cannot be used to browse other sites through us.

Note: public GET only, with no cookies or credentials. URLs pointing at internal networks, localhost or private IPs are rejected.

Use it as an API

POST /faq-site-diff/api/check with JSON ({"faq": "https://example.com/faq/", "sites": ["https://example.com/pricing/"]}; up to 3 sites) or a form body and you get the same comparison back as JSON.