Privacy Policy: AI-Ready SEO Functions (Google Sheets add-on)
Effective date: 26 October 2026. Publisher: Agent Harbor LLC, Washington, USA ("we"). Contact: brian@agentharbor.agency.
AI-Ready SEO Functions is a Google Sheets add-on. It checks public web pages you choose (HTTP status, AI-crawler rules in robots.txt, llms.txt, schema.org structured data, meta robots, canonical and hreflang) and puts the results in your spreadsheet. This policy explains what the add-on accesses, what it sends to us, and what we keep.
What the add-on accesses in your Google account
The add-on asks Google for three permissions (OAuth scopes):
| Permission | What the add-on does with it |
|---|---|
View and manage spreadsheets that this application has been installed in (spreadsheets.currentonly) | Reads the cells you pass to a function (for example the URL in =HTTPSTATUS(A2)) and, in the bulk sidebar, the column of URLs you select. Creates one new sheet in the same spreadsheet for bulk results. It never opens other files. |
Connect to an external service (script.external_request) | Sends each lookup to our audit service at watch.agentharbor.agency. The add-on's manifest allows no other address. |
Display and run third-party web content in prompts and sidebars (script.container.ui) | Shows the bulk-audit sidebar and the About, help and licence-key dialogs. |
The add-on does not read your email address, your name, your contacts, your Drive files, or any cell other than those described above. It does not use Google user data for advertising, does not sell it, and does not let people read it.
What is sent to us
For each lookup the add-on sends, over HTTPS:
- The web address (URL) being checked, taken from the cell or argument you chose and tidied before sending:
https://is added when missing, the scheme and host name are lower-cased, and anything after#is removed. - An install id: a random identifier (UUID) created by the add-on and stored in the add-on's settings. It is not derived from your account, email or device. We use it only to count daily lookups. Which install id a request carries depends on where it comes from (see "Shared spreadsheets" below).
- Your licence key, only if you entered one, to apply your paid plan. It is sent in a request header, never in a URL.
- Standard request data that every web request carries. Requests from Sheets add-ons are made by Google's servers, so the IP address we see is Google's, not yours.
Nothing else from your spreadsheet is sent: no other cells, no sheet names, no file name, no file id.
Shared spreadsheets
Google runs spreadsheet formulas from an add-on with the file owner's add-on settings. So in a spreadsheet that is shared with other editors:
- Formulas (such as
=HTTPSTATUS(A2)) typed by anyone use the file owner's install id and, if the owner entered one, the owner's licence key. They count against the file owner's plan and daily lookups. Editors never see the key. - If the owner has never opened the add-on, formulas use an install id created for that file (stored in the file's add-on settings, which every editor using the add-on can read) with the free allowance. No licence key is ever stored there.
- The bulk-audit sidebar and the dialogs always use the settings of the person who opens them: their own install id, key and plan.
What we keep, and for how long
- The URLs you check and their results: used to answer the request. When every check in a lookup succeeds, the service keeps a copy of the result in Cloudflare's cache for up to 6 hours, so that a repeat lookup of the same URL does not fetch the site again; then it expires (Cloudflare can drop it sooner). The copy holds the URL checked, the final URL after redirects and the check results. It holds no install id, licence key, IP address or anything from your spreadsheet. It is filed under a one-way hash (SHA-256) of the URL (without anything after
#) and the checks asked for, so anyone who looks up the same URL with the same checks within those 6 hours is answered from it. An answer from this cache does not use your daily lookups. A result in which any check failed (for example the site timed out) is never cached, and neither is a lookup that was refused or returned no result. - Repeat-lookup records: so that checking the same URL again within 6 hours counts once, the service stores a one-way hash (SHA-256) of the caller (install id or licence key) together with the URL in its database (Cloudflare D1). It is used for 6 hours and deleted by the nightly clean-up, so it lasts at most about 30 hours. It cannot be turned back into the URL or the caller.
- Usage counters: the number of lookups per day, stored in the same database under a one-way hash (SHA-256) of the licence key, install id or requesting network (for add-on requests that is a Google server's address), never the raw value. Short-lived counters of fresh checks per website per minute and of licence checks per network per hour are kept the same way. All counters are deleted within two days.
- Licence check results: whether a licence key is currently valid, cached under a hash of the key for up to 6 hours (60 seconds when the key was refused or the check was unavailable).
- In Google, not on our servers: your install id, your licence key if you entered one, an unfinished bulk-audit job (sheet ids, the selected range and progress) and cached results for up to 6 hours, in the add-on's user settings for your account; and, per spreadsheet, the file's install id in the add-on's document settings. Other people cannot read your user settings, but formulas in a spreadsheet you own run with them (see "Shared spreadsheets"); the key itself is never shown to anyone. The key is deleted when you choose Remove licence key, the job when it finishes or you discard it, and cached results expire after 6 hours.
We do not use analytics or tracking tools in the add-on, and we do not log the add-on's errors to any service.
Payments
Pro plans are sold through Polar (polar.sh), the merchant of record, which processes your payment and email address under its own privacy policy. We receive the order details Polar shares with sellers (such as your email and plan) to provide support and honour refunds. We never see your full card details. Google does not process the payment.
Sharing
We share data only with the services that run the add-on: Cloudflare (hosts our audit service), Polar (payments and licence keys) and Google (runs the add-on itself). We do not sell personal data or share it for advertising. We will disclose data if the law requires it.
Google API Services User Data Policy
AI-Ready SEO Functions' use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements.
Your choices
- Remove your licence key at any time: Extensions > AI-Ready SEO Functions > Remove licence key.
- Uninstall the add-on from Extensions > Add-ons > Manage add-ons, and revoke its access at https://myaccount.google.com/permissions.
- Ask us to delete the usage counters linked to your install id or key, or ask what we hold: email brian@agentharbor.agency. We answer within 30 days.
Children
The add-on is a business tool and is not directed at children under 13.
Changes
If this policy changes, we update the effective date above and, for material changes, note it in the add-on's listing before the change applies.