Legal
Privacy Policy
Effective 26 August 2026
This policy describes how SRH Web Agency (“we”, “us”, “Findly”) handles information when merchants install and use the Shopify app Findly: Smart Filters & Search (collection filters, storefront search, and a Theme App Extension). It is written for Shopify’s App Store listing and for merchants who need to know what the app accesses on their shop.
Findly is a merchant tool. Shoppers on a merchant’s storefront interact with the filter and search widgets; they do not create a Findly account.
1. Who is responsible
SRH Web Agency operates Findly and the production app at deeppink-manatee-141983.hostingersite.com. Shopify remains responsible for the merchant’s store, Admin, and Checkout. Merchants remain responsible for their own storefront privacy notices to shoppers.
2. Shopify permissions we request
Findly uses the Shopify Admin GraphQL API only (not the REST Admin API). After install, the app requests these access scopes:
read_products— product, variant, collection, and related catalog data used to build filters and search.read_inventoryandread_locations— availability and location names for in-stock filters.read_content— Online Store pages and blog articles for instant search suggestions.read_markets— market / presentment prices so price filters can match the shopper’s country.read_filesandwrite_files— list and upload color-swatch images into the merchant’s Shopify Files (files stay on Shopify; we store the resulting URL).read_companies(optional) — B2B company-location catalog prices when the merchant enables Markets / B2B pricing.
Findly does not request read_customers,read_orders, read_checkouts, or similar customer-profile scopes. We do not read customer names, emails, addresses, payment methods, or order history from Shopify.
3. Merchant data we store
All application data is scoped to the installing shop (multi-tenant). We store:
- Shop identity and sessions. Shop domain, install time, plan label, and OAuth session records (offline access token and, for online sessions, staff first name, last name, email, and user id as provided by Shopify’s session storage).
- Catalog index. Product titles, handles, vendors, types, tags, SKUs, options, prices, compare-at prices, availability, inventory location names, image URLs, mapped metafield values, variant summaries, collection titles/handles, and collection-to-product membership. This is a denormalized copy used to answer filter and search queries quickly.
- Content index. Page and article titles and handles for instant search.
- App configuration. Filter sets, metafield mappings, widget settings (position, colors, sort, search fields), color swatches, value groups, translation labels, billing subscription ids/status, and sync job status.
- Support drafts. If a merchant uses Contact in the admin, a draft of their email, subject, and message may be saved with shop settings until they send or we purge the shop. Collaborator request codes are not stored. They are emailed to Findly support only when the merchant ticks Request store access on that form.
4. Shopper (customer) data
Findly does not create shopper accounts and does not store Shopify customer profiles. Storefront widgets may send limited usage data so merchants can see how filters and search are used:
- Search keywords, selected filter combinations, product handles clicked or visited, result counts, and device type (desktop or mobile).
- An anonymous visitor id stored in the shopper’s browser
localStoragekeyfindly:vid. It is a random identifier generated in the Theme App Extension, not a Shopify customer id, email, or IP address. This id is written only when Shopify’s Customer Privacy API reports that analytics processing is allowed (the merchant’s cookie banner and the shopper’s region/consent).
Search boxes can contain whatever a shopper types. We treat those strings as usage data, not as an identity record. Storefront analytics beacons (query, filter combination, clicked product handle, visitor id, and device type) are sent only when Shopify’s Customer Privacy API allows analytics processing for that shopper. If the shopper declines analytics, we do not persist findly:vid and we do not send those beacons. Merchants should mention Findly’s storefront widgets in their own privacy policy if required by their region.
5. How we use this data
- Provide collection filters and storefront search on the theme.
- Sync catalog changes from Shopify webhooks and bulk operations.
- Show merchants their filter, search, and billing settings.
- Show merchants aggregated search/filter analytics (top queries, no-results, popular filters).
- Charge plans through the Shopify Billing API.
- Respond to uninstall and mandatory compliance webhooks.
- Deliver merchant support messages when Contact is configured.
We do not sell personal data. We do not use shopper data for advertising networks. We do not train third-party AI models on merchant catalog or shopper queries.
6. Where data is stored
- PostgreSQL (Supabase) — primary store for sessions, catalog index, configuration, analytics events, and compliance audit rows. This is not Hostinger MySQL. The database is a separate Supabase Postgres project (pooled connections on port 6543 plus a direct connection on port 5432 for migrations).
- PostgreSQL job queue — short-lived job payloads (shop domain, product/collection ids, sync commands) stored as
QueueJobrows and drained by an in-process or nohup/cron worker. Jobs are not a second catalog copy. - Shopify — OAuth, Billing, Files (swatch uploads), and the merchant’s own product data remain on Shopify.
- Email — if the merchant submits Contact, the message is sent to Findly’s support inbox over SMTP. Reply-To is the merchant’s email so we can answer from that inbox. The merchant also receives an automated confirmation with a reference number.
Access tokens are stored in the shop’s session row. They are used only to call Shopify Admin GraphQL for that shop. Catalog tables do not duplicate the access token.
7. GDPR and Shopify mandatory webhooks
Findly implements Shopify’s mandatory compliance webhooks. Shopify authenticates each request before we process it.
customers/data_request— Shopify asks us to provide data we hold about a customer. Findly does not store Shopify customer profiles. We log the request (shop domain, Shopify webhook request id, topic, timestamp, and status — never the raw customer body) and respond that we do not hold customer personally identifiable information from the Customers API. Merchants can disclose that response to the shopper.customers/redact— Shopify asks us to delete customer personal data. We do not store customer profiles. On this webhook we delete any analytics events for that shop whose search query, filter combo, handle, or visitor string contains the customer’s email, phone, or customer id. We then record a non-PII audit row and return HTTP 200.shop/redact— Shopify sends this after uninstall (typically within 48 hours) when the shop’s data must be erased. We try to queue a background cleanup; if the queue is unavailable we delete tenant data in the webhook process before responding. If that purge also fails we return an error so Shopify retries. Audit status is queued, redacted, or failed.app/uninstalled— we run the same guaranteed cleanup when the merchant uninstalls, without waiting forshop/redact.
Compliance webhook receipts are stored in a separate audit table keyed by shop domain (not a foreign key to the shop). That audit trail is kept after tenant data is purged so we can show Shopify that the request was received and handled. The row stores only shop domain, request id, topic, status, and timestamp. Customer email, phone, name, and other payload fields are not written to the database or to fallback logs.
8. Data retention
- While the app is installed: catalog index and merchant settings are kept so filters and search work. The index is refreshed from Shopify (full sync and product/collection webhooks).
- Storefront analytics: pruned automatically — 90 days on the Free plan, 180 days on paid plans.
- After uninstall: we queue deletion of sessions and all shop-scoped rows (products, collections, settings, mappings, swatches, analytics, billing mirror). Pending queue jobs for that shop are not used as a long-term store.
- Shop redact: the same deletion path runs if any tenant data is still present when Shopify sends
shop/redact. - Compliance audit logs: retained after purge for legal and App Store compliance evidence. They are not used to operate filters or search.
- Support email: if a merchant contacts us, copies may remain in our support inbox.
9. Cookies and similar technology
The embedded admin uses Shopify’s session cookies to keep the merchant logged in. The storefront Theme App Extension does not set a Findly cookie. When analytics consent is granted through Shopify’s Customer Privacy API, it may write the anonymous findly:vid value to localStorage for analytics uniqueness. If consent is not granted, that key is not written (and is removed if it was present). Filter state is kept in the page URL hash (not sent to our servers as a shopper identity).
10. International transfers
The app process is hosted on Hostinger (Node.js). PostgreSQL is hosted on Supabase (including the background job queue). Shopify remains the merchant’s store, Admin, Billing, and Files host. If a merchant or shopper is in the EEA, UK, or another region, data described above may be processed in the US to provide the app. Shopify also processes data under the merchant’s Shopify agreement.
11. Your choices and requests
Merchants can:
- Uninstall Findly, which starts deletion of shop-scoped data.
- Use Shopify Admin → Apps to review permissions, or Shopify’s customer data request / redaction tools (those trigger the webhooks above).
- Contact us using Findly → Contact in the app, or email info@srhwebagency.com. Do not send privacy requests to Shopify about this app’s stored index; Shopify will forward mandatory GDPR topics to us.
Shoppers should contact the merchant first. The merchant can use Shopify’s customer privacy tools; we will receive the corresponding webhook.
12. Children
Findly is a B2B Shopify app. We do not knowingly collect personal information from children. Catalog and analytics data come from the merchant’s store, not from child accounts we create.
13. Changes
We will update this page when our data practices or Shopify requirements change. The effective date at the top will change. The current version is always at this URL.
14. Contact
SRH Web Agency — Findly: Smart Filters & Search
Email: info@srhwebagency.com
In-app: Findly → Contact