Privacy policy
Draft, needs owner review. Not legal advice.
This policy describes how Daniel Emmerich, Israel (“we”) handles data in PageCop (the “app”), a read-only Shopify app, and on the public website at pagecop.com. The operator is a sole proprietor in Israel (osek patur) and has no separate business name. General and privacy requests go to contact@pagecop.com. Support goes to support@pagecop.com.
What the app does
The app compares a Shopify catalog with the public product pages Merchant Center crawls. It does not sign in to Google. It does not change products, inventory, themes, or feeds.
Data from the shop
When a merchant installs the app, Shopify gives us a session so we can call the Admin API with these read-only scopes: `read_products`, `read_inventory`, `read_publications`, and `read_markets`. `read_markets` is used to find up to two extra market roots besides the primary storefront. It is not used to change markets.
We store:
- Shop domain, name, country, currency, and the storefront origin.
- Catalog fields the scan needs: product id, title, handle, status, vendor, image URL, online store URL, and whether the product is published to the Google & YouTube publication when that API returns it.
- Variant id, title, SKU, barcode, price, inventory quantity, whether inventory is tracked, inventory policy (continue selling or not), and inventory item id.
- An item ID only when the merchant pastes one, or when a metafield the API already returns contains one. We cannot read the item ID stored inside the Google & YouTube app.
- Scan history, the issues we found, and short evidence quotes (HTTP status, a price, an availability value, a URL).
- The digest email address the merchant types into the app. That address is the merchant’s, not a customer’s.
- Answers the merchant chooses in the app: how they found the app, and whether they run Google Shopping or Performance Max ads.
- UTM parameters from the public site when the install link carries them into the embedded app. Shopify may drop parameters the App Store does not allow.
- The Online Store password, only if the merchant pastes one so a password-protected development store can be scanned. It is encrypted at rest with `APP_ENCRYPTION_KEY` (AES-256-GCM) before it is written to the database. The scan decrypts it in memory and sends it only to that shop’s `/password` page. It is not included in admin metrics. The key is an environment variable, not a column in the database.
- A short reason if the merchant marks an issue “This is wrong.”
- Publication snapshots: whether a Google & YouTube publication was present and how many products were published to it.
Shopify Billing handles subscription charges. We store the plan name and whether the charge is a test charge. We do not receive card numbers or bank details.
Data we do not collect
We do not collect customer name, email, phone, address, order history, or payment details. Customer payloads on the mandatory privacy webhooks are not written to the database.
We do not ask for a Google account, Merchant Center login, or Google Ads login.
Public website analytics
The public site at pagecop.com can load Google Analytics 4 only when `GA4_MEASUREMENT_ID` is set and the visitor chooses Allow on the cookie banner. The banner is shown to visitors in the UK, the EU, and elsewhere. Until they allow it, no analytics cookie is set. Declining stores that choice in the browser. The embedded Shopify admin (`/app`) does not load this tag. If `GA4_MEASUREMENT_ID` is unset, analytics stays off and the banner is not shown.
Public pages we fetch
For an installed shop, the app requests the product URLs from that shop’s catalog with the user agent `PageCop/1.0` (`https://pagecop.com/bot`). A merchant can also turn on a second fetch that sends the Googlebot smartphone token to that shop only. The HTML is read to compare status, redirects, structured-data price, and availability. We keep the finding (URL, status, and the mismatch), not a full copy of the theme.
The public URL checker on this website fetches one product URL that a visitor pastes. The same rules apply: public http or https only, Shopify-style product paths, size and time limits, and no private or metadata addresses. The checker does not write the URL or the HTML to the database. The visitor’s IP address is held in memory only, long enough to rate-limit the checker, and is dropped when the process restarts.
How long we keep shop data
Data stays while the app is installed so the merchant can see scan history.
- `app/uninstalled` deletes the Shopify session and marks the shop uninstalled. Catalog, scans, and issues stay until the shop redact webhook, because Shopify sends that later.
- `shop/redact` deletes the shop row and, through that delete, the catalog, variants, scans, issues, jobs, publication snapshots, and digest previews. Sessions for that shop are deleted too.
- `customers/data_request` records that we hold no customer personal data. We do not export customer records, because we do not store them.
- `customers/redact` records the same fact and deletes nothing else. The customer email or phone in the webhook body is not stored.
A product the merchant deletes can remain in our database, marked deleted, so a later scan can still see a URL that the feed may still be sending. It is removed with the rest of the shop on `shop/redact`.
Who else processes data
Shopify processes the install, the Admin API, and billing. The app host (pagecop.com) stores the database. The daily digest is built by the app. v1 does not send it through an email vendor; a log provider stores a preview in the app database. If you later add an email vendor, name it here before you turn it on.
We do not sell personal information.
Merchants in the US, UK, and Australia
The app is written for merchants in those markets. Shop data is processed to provide the service the merchant installed. A merchant who needs a signed data-processing addendum or a specific hosting region should contact contact@pagecop.com before install. This draft does not by itself meet every privacy-law notice those countries may require of Daniel Emmerich, Israel.
Contact
Daniel Emmerich, Israel General and privacy requests: contact@pagecop.com Support: support@pagecop.com pagecop.com