Privacy policy
Last updated 25 July 2026.
Appal: A/B Testing & CRO ("Appal", "we") is built and operated by OkayScale ApS, Denmark. This policy explains what the app stores when a merchant installs it on a Shopify store, why we store it, and how it gets deleted. Appal is free and we do not sell, rent or share data with advertisers or data brokers.
What the app reads from Shopify
Appal asks for these access scopes and nothing else:
- read_themes, to list the JSON templates in your live theme so you can pick which page to test and which alternate template is the B version. Appal does not write to your theme.
- read_orders, so the orders/create webhook can read the order total and the test assignment the storefront left on the cart. That is how a sale gets counted for the right version.
- read_products and read_inventory, to read the cost per item you have set on the products in an order. That is the only way to report profit rather than revenue, so a version that lifts sales while shrinking your margin does not get reported as a win. We read cost, nothing else.
- write_discounts and read_discounts, so an offer test can create the automatic discount each version applies, and remove it when the test ends. Appal only touches discounts it created itself.
- write_app_proxy, so the storefront can send what it records to your own domain instead of ours. It means a content blocker cannot quietly drop the visits that make up your results.
- write_pixels and read_customer_events, to install the small pixel that reports added to cart and reached checkout. It runs only for shoppers who accepted analytics cookies, and it sends a visitor id and nothing else.
What we store
- Store record. Your myshopify.com domain and the offline access token Shopify issues at install. The token is required to call the Admin API on your behalf.
- Your test configuration. Test names, hypotheses, template names, traffic splits, goals, audience rules and any custom CSS or JavaScript you enter.
- Aggregate test events. For each visit that enters a test we store the test id, the version shown, a random visitor id generated in the browser, whether the device was mobile or desktop, and the traffic source (for example "google" or "direct").
- Funnel steps. Whether a visitor already in a test added anything to their cart, whether they reached the checkout, and whether they looked at more than one page. Each is stored once per visitor as a yes or no, against the same random visitor id. No product, no basket contents, no value, and no record of which pages.
- Attributed orders. When an order comes from a visitor in a test we store the Shopify order id, the order total, the cost of the goods on it where you have set a cost per item, and which version they saw. No line items, no products and no customer.
What we never store
Appal does not store customer names, email addresses, phone numbers, shipping or billing addresses, IP addresses, or any payment information. The random visitor id is generated in the shopper's browser, is not linked to a Shopify customer account, and cannot be used to identify a person.
What runs on your storefront
The theme app extension writes one first-party localStorage entry holding the version each visitor was assigned, so the same shopper keeps seeing the same version. It also writes a cart attribute with the same assignment, which is what lets the order webhook attribute the sale. No third-party cookies, no cross-site tracking, no external scripts.
Appal also registers a Shopify web pixel, which reports only two things: that a visitor added something to their cart, and that a visitor reached the checkout. It is declared to Shopify as requiring analytics consent and nothing else, so it does not run at all for a shopper who has declined analytics cookies, and it is declared as not being a sale or sharing of data. It reads only the visitor id the theme app extension already wrote.
Sub-processors
- Railway (application hosting and PostgreSQL database), servers in the United States.
- Shopify, as the source of the data and the platform the app runs inside.
Deletion and retention
Data is kept while the app is installed so historical test results stay available. When you uninstall, Shopify sends the app/uninstalled webhook and we delete the stored access token immediately. Shopify then sends shop/redact 48 hours later, and we erase every test, event and session belonging to the store.
We also answer the customer privacy webhooks. On customers/data_request we report the attributed-order rows we hold for the requested orders. On customers/redact we delete those rows. You can request erasure at any time by emailing us.
Your rights
Under GDPR you can ask for a copy of the data we hold about your store, ask us to correct it, or ask us to delete it. Write to silas@okayscale.dk and we will answer within 30 days.
Contact
OkayScale ApS, CVR 43937790, D Lauritzens Vej 12, 6700 Esbjerg, Denmark. Email silas@okayscale.dk.