Fish ("we", "the App") is a Shopify app
that provides collection filtering and search for the merchant's storefront.
This policy explains what data we collect, why, where it is stored, how long
we keep it, and how merchants and shoppers can exercise their rights.
1. Data we collect
1.1 From the merchant (shop owner)
Shop domain, OAuth access token, granted scopes, install timestamp — required to call the Shopify Admin API on the merchant's behalf.
Billing status — current plan, subscription status, last-checked timestamp, Shopify shop GID — used to enforce plan limits and show usage on the "Plan" dashboard tab.
App configuration the merchant sets in the dashboard — search settings, synonym groups, hidden-product rules, tag exclusions, boost rules, and (if the merchant opts into semantic search) an API key for a third-party embedding provider they supply themselves (see 1.3).
Product review data, if the merchant uploads a CSV export from their review platform — review text, rating, and the product it matches to. We do not collect this from shoppers directly; the merchant supplies it.
1.2 From shoppers (storefront visitors)
We do not collect names, email addresses, physical
addresses, or any other data that directly identifies a shopper.
Search query text and aggregate counts — what shoppers typed into search, how many times, and whether it returned results — stored per shop, keyed by the query text itself, not by shopper or session.
Filter usage counts — which filter options were opened/selected and how often, aggregated per shop and filter value (no per-shopper tracking).
Order line items, from Shopify order webhooks, used only to compute bestseller/trending product rankings — product SKU, name, quantity, order status. We do not store the buyer's name, email, address, or payment details.
IP address — used transiently, in memory only, to rate-limit storefront API requests. It is never written to our database.
1.3 Shared with third parties (only if the merchant opts in)
If a merchant enables semantic search and supplies their
own API key for a provider (OpenAI, Voyage AI, Cohere, Jina AI, Google, or
HuggingFace), search query text and product text are sent to that provider
to generate embeddings. This only happens for shops that turn the feature on
and provide a key; it is off by default.
We do not sell any data, and we do not share shopper data with anyone for
advertising or marketing purposes.
2. Where data is stored
PostgreSQL, self-hosted on our own server infrastructure (not a third-party data warehouse), holds everything in §1.1 and §1.2.
Meilisearch, on the same infrastructure, holds a copy of the merchant's product/collection/page catalog for search and filtering. It does not receive shopper data — only catalog content the merchant already published on their storefront.
Our server is hosted in the United States (St. Louis,
Missouri), via hosting provider Cybercon, Inc.
3. Retention
Search query logs are deleted automatically once they exceed the retention window for the merchant's plan (Starter/Pro/Ultimate — the exact number of days is shown on the "Plan" tab of the app dashboard). A daily job purges expired rows.
Hourly request-volume counters, used only for the traffic charts on the "Plan" tab, are kept for 40 days and then purged by the same job.
Merchant configuration, billing status, and catalog data are kept for as long as the app remains installed, per §4.
4. Deletion on uninstall / merchant request
Uninstalling the app immediately revokes our stored access token, so we can no longer access the shop's Shopify data.
Within the timeframe Shopify's platform requires, we receive a mandatory shop/redact webhook and permanently delete all data tied to that shop domain — configuration, search logs, order-line data, review data, sync history — and remove the shop's search index.
We do not store data that directly identifies individual shoppers (see §1.2), so customers/data_request and customers/redact webhooks are acknowledged with no shopper-identifying records to return or delete.
5. Your rights
Merchants can request a copy of their stored configuration or ask for
early deletion by contacting us at
parsedata633@gmail.com. Shoppers
with questions about a specific store's data practices should contact that
store directly — we act as the store's data processor, not as the data
controller for their storefront.
6. Changes to this policy
We will update the effective date above and, for material changes,
notify merchants through the app dashboard or by email.