Privacy Policy for Trimsize
Trimsize (the "App") is a Shopify app provided by Appasol ("we", "us"). It lets Shopify merchants price products by the dimensions, material and options their customers enter on the product page, collect artwork, send proofs for approval, quote custom items and track what to make.
This policy explains what information the App collects and why, how it is used, stored and deleted, and the choices you have. It applies to merchants who install the App ("you") and to the merchant's customers who use the App's pricing widget on the merchant's online store ("shoppers").
1. Summary
- The App stores your shop's details (domain, Shopify shop ID, currency, granted permissions), the access credentials Shopify issues to the App (encrypted), the pricing configurations you create, and a copy of your products' catalogue details, such as titles, vendors, tags, SKUs, Shopify prices and stock (§2.1).
- It does not store personal information about shoppers: no names, email addresses, phone numbers, postal addresses or payment details.
- The dimensions, material and add-on choices a shopper enters, and any text they type into a text add-on (such as lettering or a name to engrave), are used to calculate a price and are not stored by the App. They are added to the shopper's cart and order by your store, where Shopify stores them as part of your store's order data.
- Order data stays in Shopify. The production queue, job tickets, proofs and quotes read and write your store's orders, draft orders, files and order metafields through Shopify's API. The App does not copy orders, files, proof decisions or notes to its own database. For artwork shoppers upload, it keeps only each file's ID, upload time and status, so that files no order uses can be removed after 30 days (§2.2).
- When the App's code fails, an error report (the error message and where in the code it happened, often tagged with your shop's domain when it is about your shop) goes to our error tracking service, designed to leave out shopper input, customer details and page addresses (§2.7).
- We delete your shop's data after you uninstall the App, when Shopify asks us to (§6).
2. Information we collect and why
2.1 When you install and use the App
| Information | Source | Why | Where it is kept |
|---|---|---|---|
| Your shop's myshopify domain, Shopify shop ID and currency | Shopify, at installation (the currency also when you change it) | To know which shop a request or configuration belongs to, and to show prices in your currency | The App's database |
| The permissions (access scopes) you granted, installation and uninstallation dates | Shopify, at installation and uninstallation | To run the App and to know whether it is installed | The App's database |
| An access token and a refresh token for your shop's Shopify Admin API | Shopify, at installation; refreshed about every hour | To read your products and save configurations on your behalf | The App's database, encrypted (AES-256-GCM) |
| Pricing configurations: configuration name, pricing formula or price table, materials with rates, minimum charges and units, add-ons, pricing rules, quantity breaks, size limits and their messages, how choices are shown (with their descriptions, colors and images: each image's address in your store's Files and its alt text), text add-ons' placeholders, the size fields' hints and help lines, and the Shopify product ID each applies to | You, in the App | To calculate prices on your storefront and at checkout | The App's database, and a copy in an app-reserved metafield on the product in your Shopify store, which Shopify's checkout pricing function reads; the copy leaves out the descriptions, colors, images, placeholders, hints and help lines. That copy is not readable from your storefront. A separate yes/no marker on the product is: it tells the App's theme block that the product is priced. While a product is paused on the free plan (below), the copy is replaced by the word "paused" and a yes/no paused marker, which the theme block reads to show that the product isn't available. |
| Translations: each word you translate, the language and your translation | You, in the App | To show your words in the language a shopper views your store in | The App's database. Not written to your products, and not read at checkout. |
| Photos for choices: for a product, which of its photos (its Shopify media ID) shows when a material or choice is picked | You, in the App | To show that photo on the product page | The App's database |
| Your settings in the App: the views you save on the Products page, your setup guide progress (steps you marked done, whether you dismissed the guide), the last result of the App's setup check, and the progress of bulk actions you run on products | You, in the App | To show the App as you left it | The App's database |
| If you leave a paid plan with more priced products than the free plan allows: when the 30-day notice period started and ends and when it was applied, each product's choice (keep priced, pause or remove pricing) and whether it is paused or its pricing removed, and whether its settings in your store match that yet, with the reason Shopify gave if it refused the change | Shopify (when your plan changes) and you, in the App | To give you the notice period, apply your choices when it ends, and restore your products if you choose a paid plan again | The App's database |
Your store's languages. The App reads which languages your store publishes from Shopify while you use the App, to offer them for translation. It doesn't store the list.
Your products. The App keeps a copy of your products' catalogue details, read through Shopify's Admin API: each product's title, handle, status, vendor, product type, tags, variant SKUs, its price range in Shopify (the lowest and highest variant price), its total stock and whether it tracks inventory, the address of a small version of its featured image, and when it was created and last updated in Shopify. It uses this copy to list, search, filter, sort and export your products in the App. Shopify tells the App when a product is created, changed or deleted, and the App checks the copy against your store when you open the Products page, so it stays up to date. Stock is read from Shopify, at most once an hour, when a list in the App filters or sorts by it or shows it. A product you delete in Shopify is hidden from the App's lists. The copy holds no customer information, and it is deleted when you uninstall the App (§6).
Optional permissions, asked for only when you use the feature:
| Feature | Permission | What the App reads or writes | Stored by the App |
|---|---|---|---|
| Production queue and job tickets | Read orders (last 60 days) | Your open orders' number, date, note, line items and their properties (size, material, options, text the shopper typed, artwork file), and for a job ticket the customer's language, so the proof link opens in it. No customer names, emails, phone numbers or addresses. Once a day, also the line item properties of orders placed since the oldest pending artwork upload, to find which uploaded files an order uses (§2.2). | No: read from Shopify when you open Production or Home, and once a day for artwork. A read is kept in memory for up to 5 minutes, never in the database. |
| Production stages and proofs | Edit orders | Each line's stage, and each proof's file, time, status and the customer's note, in an app-owned metafield on the order in your store | No |
| Quotes | Edit draft orders | Creates a draft order with the item, your price and your note, in your store. Reads back only the draft's ID and name. You add the customer in Shopify. | No |
Files. Proofs you upload and artwork shoppers upload go straight to your store's Files in Shopify. The App asks Shopify for the upload address; the file never passes through or stays on our servers. For shopper artwork, the App records the file's ID, the upload time and whether an order uses it (§2.2).
Paid plan. If the App charges, Shopify runs the plans and the billing. The App reads only whether your shop has an active plan and its name, and keeps that in memory for a minute. Shopify tells the App when your plan changes, and the App also checks once a day, so that it can start or end the notice period above; it stores only those dates and your products' choices, not your billing details.
The App does not store information about your staff accounts. It uses Shopify's shop-level (offline) access, not per-user access. Each request from the App's admin pages carries a short-lived session token issued by Shopify. The App checks the token and doesn't keep it.
2.2 When shoppers use the pricing widget
The widget on your product page sends what the shopper enters (width, height, material, options, any text typed into a text add-on, and quantity), the product ID and the page's language (for example de-DE) to the App, through Shopify's app proxy, to calculate the price and word its messages in the shopper's language. Shopify adds the following to each of these requests:
- your shop's domain;
- a signature;
- if the shopper is logged in, their Shopify customer ID;
- the shopper's IP address, in a request header.
What the App does with this information:
- Dimensions, material, options, typed text, quantity: used to calculate and return the price. Not stored by the App.
- Page language: used to choose the language of error messages, the price breakdown and your translated words. Not stored.
- Customer ID: not used and not stored.
- IP address: used only for abuse protection. Requests are counted per shop and IP address, in memory, for one to ten minutes depending on the request, to apply rate limits. The address may appear in our server logs when a rate limit is exceeded (§2.4).
When the shopper clicks Add to cart, your store's theme adds the width, height, material, the add-on choices, any text the shopper typed and the calculated price to the cart line as line item properties. From then on they are part of your store's cart and order data, stored and processed by Shopify under Shopify's terms and your own privacy policy. At checkout, the App's pricing function runs on Shopify's infrastructure: it reads those properties and the product's configuration to set the line price, and sends nothing to our servers.
Artwork upload (if you turn it on). The shopper's file goes to your store's Files in Shopify (§2.1); its name and file ID go on the cart line and the order. The shopper's browser reads the image's size to warn about low resolution; nothing about it is sent to us.
Many uploads are never ordered: the cart is abandoned, or the shopper picks another file. So the App records each upload's file ID, upload time and status in its database, and once a day checks uploads older than 30 days against the orders placed since (this needs the Read orders permission). A file that an order uses is kept and never checked again. A file that no order uses is deleted from your store's Files. Without Read orders, or when the App can't read every order since the upload, nothing is deleted; uploads older than 50 days that couldn't be checked are left in place.
The proof page. The link you send your customer opens a page on your store, served through Shopify's app proxy. It contains a random token; anyone with the link can see that order's proofs and answer them, so send it only to your customer. The page shows the order number, each item's properties and its proof files. When the customer approves a proof or asks for changes, their answer and note are written to the order in your store (§2.1), not to our database. The token is kept out of our request logs.
The App does not set cookies on your storefront. Shopify's app proxy removes cookies from requests to the App.
2.3 Privacy (compliance) requests
Shopify sends apps notices when a customer asks a store for their data or for its deletion, and when a store's data must be erased. We keep a record of each notice for accountability: the type of request, the shop domain, the Shopify shop ID, and, where included, the customer ID, the order IDs and the request ID, with the date and status. We do not keep the customer's name, email address or phone number that Shopify includes in these notices. Each record is deleted 12 months after the notice arrives.
The App holds no other customer data, so a customer data request has nothing further to report and a customer deletion request has nothing further to delete.
2.4 Server logs
Our servers log each request's method, path, status code and duration, and events such as installations, configuration saves, errors and rate-limit warnings. Some entries include your shop domain. Rate-limit warnings include the requester's IP address. Logs are kept by our hosting provider for up to 30 days and are used to operate, secure and troubleshoot the App. Error entries are also sent to our error tracking service (§4), which keeps them for up to 90 days. What an error report holds is listed in §2.7.
2.5 In your browser (App admin)
The App's admin pages store one thing in your browser's local storage: when the App last asked Shopify to show you its review request (so it doesn't ask again for 60 days). Earlier versions also stored there whether you dismissed the setup guide; the App now reads that once and keeps your choice with your shop's settings (§2.1). While the browser tab is open, its session storage holds the number of a bulk action running on the Products page, so its progress shows again when you come back, and a note that the App just reloaded a page after an update. The App works without them. The review request itself is Shopify's: it appears at most a few times a year, and you can close it.
The App sets no cookies. Shopify signs you in to the App's admin pages with a short-lived session token (§2.1), so installing and using the App needs none.
2.6 On our website
Our website at trimsize.app (its home, features and pricing pages, the help docs, and this policy) sets no cookies and uses no analytics, advertising or tracking. If you choose a light or dark theme there, your browser keeps that choice in its local storage. The pages, fonts and images all come from our own server, so loading them sends nothing to anyone else. Each request appears in our server logs (§2.4).
2.7 Error reports from the App
When the App's code fails, in the App's admin pages or in the pricing widget on a product page, the browser sends our server a report: the error message, the script's address, line and column, and the stack (the chain of code that was running). The widget reports only errors that involve its own scripts, and sends at most three reports each time a product page loads; the admin sends at most five each time it loads. Errors only in your theme's own scripts are not reported.
Errors on our servers are reported too (§2.4). A server report holds the request's method, path and status, the IDs of any product, template, bulk action or webhook involved, short labels our code sets (such as the step that failed), any error messages Shopify returned, and the error's type, message and stack. Many reports about a shop are tagged with its domain.
The App never adds shopper input or customer details to a report. Before a browser report is stored, web addresses in it are removed, except addresses ending in .js or .mjs (script files, and a few of Shopify's store data addresses such as a product's .js address), which are kept without their query or hash; in server reports, proof link tokens are removed from request paths; our error tracking service then masks email addresses, payment card numbers and IP addresses. Some error messages are written by the browser, by Shopify or by our database, and can quote a value the failing code was handling, such as an address written without its https:// part, so a report may occasionally contain such a value. We use reports only to find and fix faults in the App, never to identify shoppers or to profile anyone. Reports go to our error tracking service (§4), which keeps them for up to 90 days (§6).
3. How we use information
We use the information above only to:
- provide the App: calculate prices, save and apply your configurations, and show your products in the App;
- keep the App secure: verify that requests come from Shopify, apply rate limits, and investigate abuse;
- operate and fix the App, and meet our legal obligations, including Shopify's privacy-law requests.
We do not sell personal information, use it for advertising, or build profiles of shoppers.
4. Sharing
We share information only with:
- Shopify, which runs the platform the App is part of. Configurations are written to your store, and the App calls Shopify's APIs.
- Render Services, Inc., which hosts the App's servers and database in Frankfurt, Germany (European Union), as our service provider.
- Functional Software, Inc. (Sentry), which receives the App's error reports (§2.7) and stores them in the European Union (Frankfurt). Sentry is a US company, so transfers to it rely on its Data Processing Addendum with the EU Standard Contractual Clauses, and on its certification under the EU–US Data Privacy Framework.
- Authorities, when the law requires it.
5. Security
- All traffic to the App uses encrypted connections (TLS).
- Shopify access and refresh tokens are encrypted in our database.
- Requests from your storefront and webhooks from Shopify are checked against Shopify's signatures.
- Access to production systems is limited to the people at Appasol who operate the App.
No system is perfectly secure. We will notify affected merchants and authorities of a breach as the law requires.
6. Retention and deletion
| When | What happens |
|---|---|
| You uninstall the App | The App stops accessing your store. Your shop's access tokens and the copy of your products' catalogue details are deleted, and your shop is marked as uninstalled. |
| 48 hours after uninstallation, when Shopify sends the shop deletion notice | Your shop record, all pricing configurations and templates, your translations and photos for choices, your settings in the App, the plan notice dates and product choices (§2.1) and all artwork upload records in our database are deleted. |
| 30 days after a shopper uploads artwork | If no order uses the file, it is deleted from your store's Files (§2.2); its record stays as "deleted" until your shop's data is deleted. |
| Stages, proofs, quotes and files in your Shopify store | Order metafields, draft orders and files the App created are part of your store's data, under your control; uninstalling the App doesn't remove them. |
| Configurations in your Shopify store | The configuration copy and the yes/no markers on each priced or paused product are part of your store's data. To remove them, remove the products' pricing in the App before you uninstall it. |
| Compliance records (§2.3) | Deleted 12 months after the notice arrives. |
| Server logs (§2.4) | Kept for up to 30 days. |
| Error reports (§2.7) | Kept for up to 90 days by our error tracking service, then deleted. |
You can ask us to delete your data earlier at support@trimsize.app.
7. Your rights
Depending on where you live, you may have rights to access, correct, delete, restrict or object to the processing of your personal information, and to data portability. Examples are the EU/UK GDPR and California's CCPA/CPRA. To use them, contact support@trimsize.app. We will answer within the time the law requires.
Shoppers: the App holds no personal information about you beyond what is described in §2.2. Your order details, including the dimensions you entered and any text you typed, are held by the store you bought from. Contact that store, or use the privacy options Shopify gives you, and we will help the store with any request.
8. Children
The App is a business tool for merchants and is not directed at children.
9. Changes
We will post changes to this policy on this page and update the effective date. If a change is significant, we will tell merchants in the App or by email before it takes effect.
10. Contact
Appasol
support@trimsize.app