Skip to content
DM DevMotion Studio

Home / Legal

Privacy Policy

Last updated: November 7, 2026

1. Introduction

ShopCSV ("we", "our", or "us") is a Shopify app by DevMotion Studio for editing, importing and exporting products. This Privacy Policy explains what information we process when you use ShopCSV, where it is kept, for how long, and your rights.

2. Information We Store on Our Servers

To run the app we keep only the following, per store:

  • Store identity: your store's myshopify.com domain.
  • Access credentials: the access and refresh tokens Shopify issues to the app, the permissions (scopes) you granted, and for signed-in admin sessions the Shopify staff user ID. We do not store passwords, and no names or email addresses other than the store contact below.
  • Store contact for tips emails: the store's contact email and store name as Shopify reports them (read once after you install the app), the admin language, the install date, which of the onboarding emails were sent and when, and whether you unsubscribed. Nothing else about you, your staff or your customers.
  • Plan: your ShopCSV plan, its status and the Shopify charge ID.
  • Timers of scheduled changes: if you schedule changes, the schedule's ID, when it runs (start and optional undo), its status, the number of attempts and a short error message. The changes themselves are kept in your store (see section 3).
  • Automation timers and run summaries: if you set up automations (rules or supplier feed sync), for each one its ID, when it runs next, its status, the number of attempts and a short error message; while a run is split over several minutes, Shopify's page position or the feed row number it continues from; for a rule that runs on new products, the new product's Shopify ID until the rule has run for it (then it is deleted). For the last 20 runs of each automation: when it ran, its status, counts (products or SKUs matched, changes, SKUs not found, products skipped, changes not applied), the IDs of the saves it added to your change history and a short message. No product data. The automations themselves are kept in your store (see section 3).
  • Google sign-in in progress: while you connect a Google account, a one-time random value (PKCE verifier) for up to 10 minutes; it is deleted when the sign-in finishes.
  • AI assistant access tokens: if you connect an AI assistant (Help → Connect an AI assistant), for each access token you create: a SHA-256 hash of the token (never the token itself), the name you gave it, read or read-and-write access, and when it was created, last used and revoked. If you connect an assistant by signing in (for example ChatGPT or Claude), the same for the connection, named after the assistant, plus the assistant's app ID, a SHA-256 hash of its refresh token (and of the previous one, to detect reuse) and when the access and refresh tokens expire.
  • AI assistant sign-in: the apps registered to sign in to ShopCSV (for example ChatGPT or Claude): the app ID, the name the app gave itself, the web addresses it may return to and, if it has one, a SHA-256 hash of its client secret; for apps identified by a published metadata document, a cached copy of that name and those addresses (fetched again from the document when the cache expires, after 5 minutes to 24 hours). Apps that never complete a sign-in are deleted after 30 days. While you sign in we keep the request for at most 10 minutes: the app ID, its return address and the value it asked to get back, a PKCE code challenge, the access requested and approved, your store's myshopify.com domain and a SHA-256 hash of the request ID and of the single-use authorization code. These requests are deleted within a day after they expire, and with your other data at uninstall. No product data.
  • Usage counters: per day and feature, how many requests were made and how many items were read or written (numbers only), used for plan limits and capacity planning.
  • Technical logs: events and errors (for example "save completed with 2 failures") with the time, the request path, IP address and browser user agent. To diagnose a failed change a log entry may contain Shopify IDs, product handles, SKUs and Shopify's error message.

We do not collect any data about your customers or your orders.

3. Product Data (Not Stored by Us)

ShopCSV reads and changes, through the Shopify Admin API and only when you use the app:

  • Product titles, handles, vendors, statuses, types, tags, categories, descriptions, SEO titles and descriptions, and the collections a product is in (and collection names)
  • Variants: titles, options, SKUs, prices, barcodes, cost per item, weight, tax and shipping settings, HS codes and country of origin
  • Inventory quantities at your locations, and the names of those locations
  • Product and variant metafields you choose to show, and the metafield definitions (names and types)
  • Fixed variant prices on your Markets and B2B price lists you choose to show, and the names and currencies of those price lists
  • Product images (their links, alt text and order) when you show the Images column; images you add by URL are downloaded by Shopify, not by us; images you upload go from your browser straight to Shopify
  • Translations of product titles, descriptions, SEO titles and descriptions and handles, and the names of your store's published languages, when you show a translation column (ShopCSV asks for this access only then)

We do not copy or store your products on our servers. Product data is read from Shopify when you open a page, run an import or an export, and written straight back to Shopify when you save. It passes through our server only while a request is processed (apart from the identifiers that may appear in technical logs, see section 2). Export files are generated for you to download and are not kept. For large catalogs Shopify first prepares the products as a temporary file on its own storage (a "bulk operation"); our server reads it once while building your export and does not keep it.

Change History (stored in your store)

So you can review and undo a save or an import, ShopCSV keeps a history of your last 20 saves and imports (up to 90 days): for each change the product, variant or inventory item, the field, the value before and after, and product names for display. This history is stored in your own Shopify store as private data of the ShopCSV app (app-data metafields of the app installation), not on our servers. Only ShopCSV can read it, and Shopify deletes it automatically when you uninstall the app.

Each save in the history also records who made it: the Shopify staff user ID of the person signed in to the app (from Shopify's session token; ShopCSV does not ask Shopify for staff names or email addresses), or the name of the AI assistant access token or of the schedule that made the change. If you give staff IDs names in History ("Staff names"), those names are stored the same way, in your store's private ShopCSV app data, and are removed when you uninstall the app. The change log you can download from History as a CSV file is made in your browser from this history; we do not keep it.

Quick filters (for example "Duplicate SKUs" or "Margin below X%") ask Shopify to read your catalog with a bulk query. Our server reads the result, computes the IDs of the matching products in memory for that request and sends them to your browser; nothing is stored. Products you exclude from a view and the filter conditions you build are kept in your browser while you use the app, and with a saved view if you save one.

Changes you schedule for later (for example a sale that starts and ends at set times) and your saved views are stored the same way, in your store's private ShopCSV app data. At the scheduled time our server reads them from your store and applies them; they are removed from your store once the schedule has finished or is cancelled.

Saved views (a name with the filters, columns and sort you chose) are stored the same way, in your store.

Automations (their name, product filter, actions, schedule and, for feed sync, the feed link you enter and the column mapping) are stored the same way, in your store's private ShopCSV app data. When an automation runs, our server reads it from your store, reads the matching products from Shopify and writes the changes through the same guarded save as the app, recorded in the change history in your store. For feed sync our server downloads the feed from the link you gave at each run (and when you click Check feed), processes it in memory and discards it at the end of the run: nothing from the feed (SKUs, quantities, prices) and nothing from your catalog is stored on our servers, only the run summary counts described in section 2. A feed link may contain an access key of your supplier; it is stored only in your store and sent only to the supplier's server.

Scheduled exports. If you set up an export, at each run our server builds the same file as Export All from your products in Shopify and sends it, while it is being built, to the destination you chose: your FTPS server (FTP over TLS) or your Google Drive. The file is not written to our disk and not kept. The server name, port, user and file path are stored with the export in your store's private ShopCSV app data; the password is stored there too, encrypted with a key that only our server has, is used only to log in to that server, and is never shown again or written to our logs.

Google Sheets and Google Drive. If you connect a Google account, ShopCSV asks Google only for access to the files it creates in that Drive (drive.file) and read-only access to Google Sheets (spreadsheets.readonly, to read the sheet you choose to import from; ShopCSV never changes your other sheets). Google's refresh token and the account's e-mail address are stored in your store's private ShopCSV app data, the token encrypted with our server's key. "Export to a sheet" writes your catalog to a sheet ShopCSV created in your Drive; "Import from a sheet" reads the sheet you chose at each run, in memory, and writes the changes to Shopify through the same guarded save as the app (recorded in the change history in your store); nothing from the sheet is stored on our servers. Disconnect Google revokes ShopCSV's access at Google and deletes the token from your store; you can also remove ShopCSV's access in your Google Account settings. The sheets and files ShopCSV created stay in your Drive. ShopCSV's use of information received from Google APIs adheres to the Google API Services User Data Policy, including its Limited Use requirements: the data is used only to provide these features to you, is not used for advertising, is not sold and is not read by people.

Import column choices (which column name in your files is read as which ShopCSV field, for example "Brand" as Vendor) are stored the same way, in your store. They contain column names only, never product data.

When you upload images with Import → Upload images (ZIP), the ZIP file or the images are opened in your browser and sent from your browser directly to Shopify's upload storage. The image files never pass through or are stored on our servers. Our server receives only the file names (to find the products by SKU or handle), their type and size, and asks Shopify to prepare the upload and to add the uploaded images to your products. The upload is recorded in the change history in your store (the product and variant IDs and the IDs of the images it added) so you can undo it.

Excel (.xlsx) files you import are read in your browser and go through the same import as a CSV file. Excel and Shopify-format export files, and the list of import errors you can download, are made in your browser from the same data as the CSV export; we do not keep them.

AI Assistants (MCP)

If you connect an AI assistant (for example Claude, Cursor or VS Code) with a ShopCSV access token, or by signing in from the assistant (for example ChatGPT or Claude: you enter your store's domain on our page and approve the access in your Shopify admin; we never ask for your Shopify password), the assistant sends requests to our MCP server. We process each request like a request from the app: product data is read from Shopify and returned to the assistant, and changes you confirm are written to Shopify and recorded in the change history in your store. We do not store the products or the assistant's conversation. When the assistant prepares changes for you to confirm, the prepared changes (product and variant IDs with the values before and after) are held encrypted for at most 15 minutes so they can be applied, then deleted. The product data the assistant asks for is sent to that assistant and its provider under your own agreement with them; we do not choose or control that provider.

Shopify Flow

If you use the ShopCSV actions in Shopify Flow, Shopify sends each action run to our server, signed with the app's secret. We process it like a save from the app: the product is read from Shopify, the change is written to Shopify (or kept as a scheduled change in your store) and recorded in the change history in your store. We do not store the products. So that a request Shopify resends is not applied twice, we keep for up to 48 hours a one-way hash of the action run's ID with its outcome (the number of changes and the history or schedule ID), then it is deleted. The ShopCSV Flow triggers send Shopify only counts, IDs, the save's source and a schedule's name.

Onboarding and Tips Emails

After you install ShopCSV we send a few short emails from [email protected] to your store's contact email: a welcome note, then tips on day 1, day 3 and day 7 (bulk edits, scheduled sales, imports and AI assistants, and a request for feedback). At most four emails, each with a link into the app; replies go to the developer. The emails contain no tracking pixels and no tracked links, and we don't measure opens or clicks. They are sent from our own mail server (see section 5). To stop them, use the unsubscribe link in any email (one click) or turn off Help → Tips by email in the app; no more emails are sent after that. The store contact is deleted when you uninstall the app.

4. How We Use Information

  • To provide the app: show, edit, import and export your products as you request
  • To apply your plan and its limits
  • To keep the service secure and working, and to troubleshoot problems you report
  • To understand which features are used (from the usage counters), so we can improve the app
  • To send the onboarding and tips emails described in section 3, until you unsubscribe

We do not sell your information, do not use it for advertising and do not build profiles.

5. Where Data Is Kept and How It Is Protected

  • Our servers are hosted by Hetzner Online GmbH in a data centre in Finland (European Union).
  • All connections are encrypted (HTTPS/TLS). The database is not reachable from the internet.
  • Server access is restricted to the developer and uses SSH keys only. Shopify access tokens expire and are refreshed automatically.
  • Every request from Shopify is verified (signed session tokens and webhook signatures).
  • Emails are sent by our own mail server on the same infrastructure (no email service provider) and signed with DKIM.

6. Service Providers and Sharing

We do not sell, trade or rent your information. It is processed only by:

  • Shopify — the platform the app runs on; your product data and change history stay in Shopify.
  • Hetzner Online GmbH (Germany; servers in Finland) — hosting of our servers.
  • Cloudflare, Inc. — network security and delivery: requests to the app pass through Cloudflare, which processes IP addresses and request metadata.

Destinations you choose yourself receive what you send them: if you connect Google, your exports and sheets are processed by Google LLC under your own agreement with Google; a scheduled export to an FTPS server goes to the server you entered.

We may disclose information if required by law or a valid legal request, or to protect the security of the service.

7. Data Retention

  • The store contact for tips emails (contact email, store name, email status) is deleted as soon as you uninstall the app, and again at shop/redact.
  • Access tokens are deleted as soon as you uninstall the app (Shopify also revokes them). AI assistant access tokens (their hashes) are deleted at the same time; a token you revoke stops working at once and its record (name and dates) is kept, marked revoked, until you uninstall. The same applies to assistants connected by signing in; their access expires after 30 days and their sign-in after 90 days without use.
  • 48 hours after uninstall Shopify sends us a data deletion request (shop/redact); we then delete everything we hold for your store in our database: credentials, plan, usage counters, the store contact for tips emails, schedule timers, automation timers and run summaries, AI assistant token and sign-in records and logs. Scheduled changes and automations do not run once the app is uninstalled (automation timers are deleted at uninstall).
  • While the app is installed: technical log files are kept for up to 30 days, log entries in our database for up to 90 days, and usage counters for up to 400 days.
  • Automation run summaries: the last 20 runs of each automation.
  • Export settings (including the encrypted FTPS password) and the encrypted Google connection are in your store's app data and are removed by Shopify when you uninstall the app; the Google access can also be removed at any time with Disconnect Google or in your Google Account.
  • The change history in your store is kept for up to 90 days (last 20 saves and imports) and removed by Shopify when you uninstall the app.
  • Server backups may contain a copy of the database until they are overwritten.

8. Your Rights

You can ask us what we hold about your store, and ask us to correct it, delete it or send you a copy. Write to us (section 11); we answer within 30 days. Uninstalling the app also deletes your data as described in section 7. If you are in the EEA or the UK you may also complain to your data protection authority.

9. GDPR

For users in the European Economic Area and the UK, our legal bases for processing are:

  • Contract — providing the app you installed
  • Legitimate interests — security, troubleshooting and improving the app, and short onboarding emails about the app you installed (you can unsubscribe at any time)
  • Legal obligations — where the law requires us to keep or disclose information

Our servers are in the EU. Where a service provider listed in section 6 processes data outside the EU, it does so under its standard data protection terms (such as the EU Standard Contractual Clauses).

10. Changes to This Policy

We may update this Privacy Policy. We will post the new version on this page and update the "Last updated" date.

11. Contact Us

Questions or requests about privacy: