Check Engine / Privacy

Privacy policy

Check Engine is desktop software that runs on your Mac or Windows PC. This policy covers both the application and this website.

Check Engine for Windows is the same application and makes the same requests. Where this policy says Mac, read the Windows PC you run it on.

The application

Nothing about the sites you audit reaches us, Kerr & Company: the crawl and the report stay on your computer. The requests that do leave it are listed below with who receives each one, and the ones that come to us are for the public update, price and knowledge files on this website and, on a copy with no licence, a question to an offer server we run. What our payment provider receives on our behalf is your licence key and a name for each Mac you activate it on. There is no account, no telemetry and no crash reporting. The licence key is checked with our payment provider when you activate it and about once a day after that.

An earlier version of this policy said the only network requests the app makes are to the website you ask it to audit, and the next one named three kinds of destination. Neither was accurate, and a privacy policy is the last document that should be approximately true. This is every request the shipped app makes, read from its code, starting with the ones it makes unless you switch them off.

What it does by default

  • The licence check, to Dodo Payments. Dodo handles our checkout and issues the licence keys. When you activate Check Engine, the app sends Dodo your licence key and a name for that activation: Check Engine @ followed by the computer's hostname: on a Mac, the network name macOS usually builds from the computer's name; on Windows, the computer name. After that it sends the key with that activation's id about once a day, when the app opens or an audit starts, and again if you deactivate. None of these requests carries anything about your audits, and no switch turns them off.
  • The update check, to this website. When the app opens, and every thirty minutes while it stays open, it asks docketseo.app/updater.json whether a newer version exists; Check for Updates… in the Check Engine menu asks on demand. It sends nothing but the request for that file. If you accept an update, the new build is downloaded from this site's releases on GitHub, and nothing installs without you saying yes. No switch turns the check off.
  • The offer, to this website and to our offer server. Only on a copy with no licence key, and only while its activation screen is open, the app asks docketseo.app/offer.json for the current price and any founding offer, and asks kerr-lead-agent.kerrco.workers.dev, a server we run, whether the founding offer is still open, sending only this site’s name. That is how it avoids showing an offer that has ended. Nothing else is sent. With “Keep it private” ticked in the crawl settings it asks neither, and shows the list price alone. Buy opens our buy page in your browser.
  • Google PageSpeed Insights, for Core Web Vitals. The addresses of up to five of your shallowest pages, homepage first, each sent to Google's PageSpeed Insights API, which then measures that page. It works without an API key, and the desktop app never sends one.
  • DNS, for email deliverability. The mail domains of the addresses your pages publish, leaving out free providers such as Gmail. Check Engine looks up their mail-server (MX) and address records, asking your computer's own DNS servers first and Cloudflare's and Google's public resolvers if those do not answer. Where a domain has no MX record, it also opens a connection to port 25 on that domain's server to see whether anything is listening, and closes it without sending a message.
  • Google's autocomplete, for topic suggestions. The topic you type in “What is this site about?” or, if you leave it empty, up to three words that recur in the titles, headings and descriptions of at least a quarter of your pages, leaving out the site's own name unless nothing else recurs. Each is sent to Google's public autocomplete on its own and with question and buying phrases added, such as “how to” and “cost”. If you type nothing and no word recurs, nothing is sent.
  • This website, for the knowledge file. The knowledge refresh fetches docketseo.app/data/knowledge.json: the current AI crawler list, Core Web Vitals thresholds and ranking notes. It is a plain request for one public file. Its user-agent says Check Engine, and it carries nothing about you or what you are auditing.
  • The site you asked it to audit. The crawl itself, from your machine, naming itself as Check Engine, and the edge-access checks, which request your homepage again as Check Engine and once as each of Googlebot, OAI-SearchBot, GPTBot, ChatGPT-User, PerplexityBot, Perplexity-User, ClaudeBot, Claude-SearchBot, Claude-User and Meta-WebIndexer, naming Check Engine in each, to see what your server tells them.
  • Other sites your pages point to. Check Engine checks that a sample of your links to other sites still work, and that the share images your pages name load, with a request to each address and a second if the first fails. It fetches the stylesheets your pages link, including ones served from other hosts. And it renders a small sample of your pages in WebKit on a Mac, or Microsoft’s WebView2 (Chromium) on Windows, which runs their scripts the way a browser would, so whatever those pages load, such as analytics or advertising pixels, is requested too.

What turns each off

The offline switch turns off five of these together: PageSpeed Insights, the deliverability lookups, topic suggestions, the knowledge refresh and the edge-access checks. In the app it is the box labelled “Keep it private: only contact this site”, and on the command line it is --offline. It also keeps stylesheet fetches to the site you audit. It does not turn off the licence check, the update check, the link check or rendering. Unticking “Also check that links to other sites still work” in the app, or --no-link-check, turns off the link check, and rendering can be turned off only on the command line, with --render 0. There is no separate switch for each of the five: the offline switch is the one control. These runs ignore it, and always make the five checks and render pages as usual: re-audits of the sites you save, whether on their schedule, which runs only while Check Engine is open, or from “Check now”; checkengine diff; and checkengine logs --url.

What it does only when you ask

  • checkengine backlinks and checkengine attack read Common Crawl's public link graph from commoncrawl.org. Each download reads a public file from its beginning rather than asking for your domain, so the request does not name the domain you are asking about. --referring streams larger files the same way, and --no-authority skips it in checkengine attack.
  • checkengine attack --demand sends the phrase you give, or one Check Engine reads off the site, to Google's autocomplete in the same way as topic suggestions.
  • checkengine logs --verify looks up each address in your log file that claims to be Googlebot in DNS, to confirm it is Google's.
  • --psi-key on the command line sends your own PageSpeed Insights key to Google with those requests.
  • An AI assistant you connect with checkengine mcp runs audits that make the same requests as any other, and it can ask for offline mode.

Audit results, your saved-site list and any crash reports are stored on your machine in ~/.docket/ as plain JSON files. They are never transmitted. Deleting that folder removes them permanently.

This website

This site is static and runs four third-party scripts. The first is Plausible, which counts page views. Plausible states that it uses no cookies, collects no personal data and does not track visitors across sites; it is hosted in the EU. Nothing about your audits reaches it. Audits run on your computer and this website never sees them. Standard server logs may record IP addresses and requested URLs, which are used only to keep the site running.

The second is the chat assistant in the corner of the page, which answers questions about Check Engine. Its script is loaded from kerr-lead-agent.kerrco.workers.dev, a server we run. The assistant stores nothing in your browser (no cookie of its own, no local storage, no session storage), and it reads nothing about your device. It draws itself in an isolated shadow root, so it cannot see or change the rest of the page. If you type a question into it, that question is sent to that server so it can be answered; if you never open it, nothing is sent. It knows only published facts about Check Engine, and the price it quotes comes from the payment provider rather than from this page, so it cannot quote you a price the checkout will not honour.

The third is on the front page only: the founding-offer bar across the top of the page, loaded from kerr-lead-agent.kerrco.workers.dev, the same server as the assistant. When the page loads it asks that server whether the offer is still open, and the only thing it sends is this site's name. If you close the bar, the time you closed it is kept in your browser's local storage so the bar stays away for seven days; nothing else is stored and it sets no cookie. It draws itself in an isolated shadow root, like the assistant.

The fourth is on every page: a small script loaded from kerr-affiliate-hub.kerrco.workers.dev, a server we run, which is where our Download and Buy links point. It does three things. When you click a Download or Buy link, it marks the click as made by a person, because a crawler that only follows the address never makes a click, so we can count people apart from crawlers. If you arrive through an affiliate or partner link, with an id such as ref or via in the address, it keeps that id in this site's local storage for thirty days and adds it to the Buy link, so the person who recommended Check Engine is credited if you buy; it sets no cookie. It also keeps the landing word, such as producthunt, from the same short list as below, in local storage for thirty days and adds it to Download and Buy links. It sends nothing itself. The server it points at counts downloads and Buy clicks per day, per page tag and country, and whether the click looked like a person; it stores no IP address and no user agent. If a content blocker stops the script, the links still work.

No advertising pixel. Until 6 November 2026 every page here also loaded Meta’s advertising pixel, a script loaded from Facebook’s servers, which set a cookie named _fbp and told Meta that a page was viewed; the thank-you page also told Meta that a purchase had completed. All of it has been removed. A browser that visited before may still hold an old _fbp cookie until it expires; nothing on this site sets or reads it now.

Until Check Engine for Windows was released, a form for visitors on Windows was written into this site's front page, download page and pricing page. It sent an address only when one was typed and the button pressed, to kerr-subscribe.kerrco.workers.dev, a server we run. The form is gone. The addresses it collected are used once, to say Check Engine for Windows is ready, and for nothing else.

One more thing runs here, written into this site's own pages rather than loaded from anywhere. If you arrive from a link that says where it was shared, such as ?ref=producthunt, via or utm_source, from a fixed list of names, such as Product Hunt, Hacker News, Reddit, Claude, ChatGPT, a newsletter and the like. The page keeps that one word in your browser's session storage for this visit and adds it to its Download and Buy links, so we can count how many downloads came from a launch. It is never an affiliate id, nothing else is stored, and it is gone when you close the tab. Arrive any other way and it does nothing at all.

These paragraphs have been rewritten three times as the answer changed. They once said the site “sets no cookies” and runs “one third-party script”; both were true until Sled was added. The line calling Sled the only thing here that can set a cookie was true until Meta's advertising tracker was added. The count said three until the chat assistant was added, and the description on this page still said three after the body said four. Our own audit caught that, and it was corrected to five, which is when the Windows form on the front page was counted too. It said five while the front page loaded six: the founding-offer bar was missed until a count of every script on every built page was checked against this list, and that count now runs before every deploy. It said six until the click-counting script was added on every page. It went back to five on 2 November 2026, when Sled was retired; affiliate credit is kept by the click-counting script, without a cookie. It went to four four days later, when Meta's advertising tracker was removed: it sent every visit here to Meta and set a cookie to do it. This paragraph is the reason that was noticed: each correction is made above rather than quietly deleted. A privacy page that enumerates what a site does not do is only worth reading if the enumeration stays complete.

Changed 7 November 2026. From late August 2026 until 7 November 2026, when someone bought Check Engine, our sales system sent Meta (Facebook) the price, the currency and a one-way coded copy of the buyer’s email address (a SHA-256 hash), so that Meta could count the sale for advertising. We switched it off on 7 November, and the code that did it has been removed. Nothing about a purchase goes to Meta now.

If you would rather not be counted, any content blocker stops it, and nothing on this site depends on it loading.

Data you give us

The free checkers send the address you type, and nothing else about you, to ai-crawler-check.kerrco.workers.dev, a server we run. Nothing is sent until you press the button. The AI crawler checker and the robots.txt tester make that server fetch the site's robots.txt. The SEO checker, the title and meta tag checker and the JSON-LD checker make it fetch the page at that address, read its title, meta tags, headings and structured data, and send back only the result of the checks, not the page. The redirect checker and the HTTP header checker make it follow the address hop by hop and send back each hop's address and status code and the final page's headers, never its cookies. The search result preview sends nothing: it runs in your browser.

The same checks are offered to AI assistants as a connector at mcp.docketseo.app, run by the same server. When you ask an assistant such as Claude to use it, the assistant sends that server the tool's arguments: a page address, or for the snippet preview a title and description. Nothing else about you or the conversation is sent. The server fetches the page, its robots.txt or its headers, returns the result to the assistant, and keeps nothing about the request or the site. It keeps a copy of what it fetched for five minutes, like the checkers above, and counts requests per connection for a minute and across all users per day, to stop floods; those counts hold no address, page or result. The server also keeps daily counts by assistant family for conversations started, tool calls and guide links, and by tool outcome, never an address, client name or session id. These daily counts are kept for thirty-five days. The connector has no account and no key. The server runs on Cloudflare, which hosts it; nobody else receives what an assistant sends it, apart from the site being checked, which sees an ordinary request for its page. There is no saved site or conversation to delete. You can stop at any time by removing the connector from the assistant. Questions go to support@docketseo.app. The server names itself in each request. The checkers set no cookie and store nothing in your browser.

After a purchase, the page you return to asks kerr-affiliate-hub.kerrco.workers.dev, a server we run, what that payment came to, sending only the payment’s id, so our own sales count shows what you actually paid rather than the list price. Nothing about you is sent or returned.

The same page asks, once, how you found Check Engine. It is optional. If you tap an answer, the page sends that one word, such as google, to the same server, which adds one to a daily count for that answer and the country the request came from. Nothing else is sent or kept, nothing is stored in your browser, and nothing is sent if you do not tap.

The planned email boxes on the AI assistants page and the download page are switched off. Neither page shows a box or sends an address. When enabled, until 30 November 2026 the box offers a confirmation email and one reminder the day before the launch price ends, on the price-reminder list. From 1 December it offers news about new checks about once a month, on the separate news list. Asking for a reminder does not sign you up for news.

Nothing is sent unless you type an address and press the button. Then the address and the name of the list go to kerr-subscribe.kerrco.workers.dev, a server we run. It keeps the address, the list name, the site name and the date, and nothing about your device. We will switch the boxes on only when the email service can send a confirmation first. Until then they collect nothing. The reminder list is deleted on 1 December 2026. To be removed sooner, use the unsubscribe link or ask, and the row is deleted. News addresses are kept until you unsubscribe.

Until 8 November 2026 this section said the home page had one email field; by then no page had one.

This section said “there is no contact form and no mailing list” until 2026-08-24. The field went live on 2026-08-18, so the denial stood for six days while addresses were being collected. It is corrected here rather than quietly rewritten, for the reason given two paragraphs above: an enumeration of what a site does not do is worth nothing unless it is kept complete, and this is the enumeration failing.

If you open an issue on GitHub, that issue is public and GitHub's privacy policy applies to it; we hold nothing separately.

The Chrome extension

Check Engine page check, the free Chrome extension, has its own short page: what it reads and what it sends. It sends nothing to us.

Changes

If this policy changes, the updated version appears on this page.

Contact

Questions about privacy or anything else: get in touch.