Privacy policy

Last updated: October 26, 2026

This policy explains what the Post Purchase Surveys app (“the app”) stores, why, and for how long. Furvur Inc. (“we”) makes the app. The app is used by Shopify merchants (“merchants”) to survey the people who buy from them (“buyers”).

What we store about buyers

The app does not store buyers’ names, email addresses, phone numbers or postal addresses, and we do not save IP addresses with answers. The app does not ask Shopify for access to customer records. When a merchant uses reminders, the app reads a buyer’s email address from the order in Shopify at the moment it is needed, uses it once, and does not store or log it (see “Reminders” below). Apart from the unsubscribe list described there, the only personal details we can hold are ones a buyer types into a written answer and our scrubbing misses.

A merchant can show a different survey, or different questions, based on the products in an order or its amount. To choose, the survey on the checkout pages reads the order’s product and variant IDs, its subtotal and its total in the buyer’s browser. It does not send them to the app: with the answers, it sends only the IDs of the survey and the questions it showed. When a store has such rules and a buyer opens a survey link, or a reminder is due, the app reads the same details from Shopify, uses them only to choose the survey, and then drops them. The products in an order are never stored, logged or exported.

Our hosting provider, Cloudflare, keeps short technical logs of requests to the app and of the app’s error messages. These logs can include IP addresses and store domains, and are deleted after at most 7 days. They contain no order IDs, no answer text and no questions asked to Ask AI. When an AI request fails, the log holds only the store domain, the day and the kind of error.

Answers are not anonymous. Each answer links to an order, and the merchant can see who placed that order in their Shopify admin.

What we store about merchants

How long we keep it

Each merchant chooses a retention period of 7, 30, 60 or 90 days. New stores start at 30 days. Every night, the app adds answers up into daily totals: for each day and answer, the number of answers and the sum of their order totals. In the first nightly run after the retention period ends, the individual answers are deleted, including the text of written answers. So an answer can stay up to about one day longer than the retention period.

The daily totals stay, so that charts keep their history. They contain no order ID and no text. Next to them, the app keeps for each day and question the number of answered orders, the number of those with an order total, and the sum of those totals, for “Revenue with an answer” in Insights.

On paid plans, the app also groups written answers into themes every night, before the text is deleted. A theme is a name of 2 to 5 words, such as “shipping cost”, with a count for each day. The theme names and their daily counts stay after the text is deleted, like the other daily totals. Themes are automatic on paid plans, with no setting. The Free and Legacy plans have no themes.

To stop one order from answering twice, we keep the Shopify order ID of each answered order. We delete it when a buyer’s deletion request covers that order, or when we delete the store’s data.

For the response rate in Insights, the app counts every new order of the store on its day (UTC). The daily order counts hold no order IDs and stay while we keep the store’s data. To count each order only once, the app keeps the order ID and the time it was counted for 7 days, and then deletes them. We also delete them when a buyer’s deletion request covers that order, or when we delete the store’s data.

What we do with it

In the app’s reports, an answer given by fewer than 3 buyers is never shown on its own. The daily totals export uses the same rule for each day and question: such answers are merged into one “Small groups” row, or left out when that row has fewer than 3 answers. The REST API and AI clients get totals under the same rule, and the AI features get data only after it: themes with fewer than 3 answers are hidden in Insights. Only the answers export, the Answers page, webhooks, and the recent answers in the REST API and for AI clients list single answers, with their order IDs. Each answer is also attached to its own order in the merchant’s Shopify admin, through tags and the order’s app data. We do not sell data, and we do not use it for advertising.

AI features

On paid plans, the app uses Claude, an AI model made by Anthropic, through the Claude API (model claude-haiku-5-5). The Free and Legacy plans use no AI, and the app makes no AI calls for them. Anthropic gets only this:

Anthropic never gets order IDs, customer details from Shopify, the amount of a single order, or answers that are hidden because of a plan limit. Totals reach the AI only after the small-group rule: groups of fewer than 3 answers are left out. When a store has several surveys, each question is sent with its survey name, which the merchant writes. A written answer can still hold a name that our rules missed; scrub assist exists to remove such names.

Ask AI keeps the merchant’s latest 20 questions and the AI’s answers in the store’s data. Each question is recorded in the access log as ai:ask, with the time only. The number of questions each calendar month (UTC) is limited by plan: 50 on Starter, 200 on Growth, 500 on Pro and 1,500 on Scale. Weekly insights are made every Monday for paid stores with 3 or more answers that week. They are shown in the app, and the latest 12 are kept.

Reminders

On paid plans, a merchant can turn on reminders: a message with a survey link for buyers who did not answer on the checkout pages. For this, Shopify tells the app about each new order, and the app keeps only the order ID and the time the order was created. A pending reminder holds the order ID, the time it is due, and the time it was sent on each channel. We delete a finished reminder after 60 days.

Survey links in reminders point to v2.postpurchase.net/s/…, the app’s address. A survey link, and an unsubscribe link (/u/…), holds only the store and a random ID, so request logs contain no order IDs. The app keeps a record of each link in the store’s data: the random ID, its purpose, the order ID and the expiry date. A survey link works for 30 days and accepts one answer. Reminder unsubscribe links work for 365 days. Unsubscribe links in the weekly summary email work for 365 days and hold no order ID. We delete a link record when it expires, when a buyer’s deletion request covers the order, or when we delete the store’s data.

Reminders go out through the merchant’s own tools:

Reminder and answer events (to Klaviyo, Shopify Flow and webhooks) also carry the survey’s ID and name, which the merchant writes. To stop the same event from going out twice, the app keeps a “sent” mark (the order ID or the week, and the destination) for up to 60 days. We delete these marks when a buyer’s deletion request covers the order, or when we delete the store’s data.

Reminder emails from the merchant’s own domain are not available yet. When a merchant uses them, they work like this. When a reminder is due, the app reads the buyer’s email address and the order name from Shopify, and uses the address in one request to Amazon SES, which sends the email from the merchant’s own verified domain. Then the app drops the address: it is not stored or logged. The emails have no tracking pixels and no click tracking. Amazon SES reports only bounces and complaints back to the app, through Amazon SNS. Such a notice contains the email address. The app uses it only in memory to make the hash for the store’s block list (below), and never stores or logs it. A permanent bounce or a complaint stops further reminder emails from that store to that address; a temporary bounce changes nothing.

When a buyer unsubscribes, the app reads the email address from Shopify at that moment and stores only a one-way keyed hash of it (HMAC-SHA256, with a different key for each store) and the time. We keep the hash while we keep the store’s data, so that the unsubscribe stays in force, and we delete it when we delete the store’s data.

“Send a test” on the Reminders page reads the store’s own email address from Shopify when the merchant clicks it, and sends one reminder email with sample values to that address only, from the merchant’s domain. The address is not stored or logged. The app counts test sends for the current UTC day, with no address, and allows at most 5 a day. Each sending domain in Amazon SES carries a tag with its store. If Amazon SES cannot delete a domain when we delete the store’s data, the domain record and the former store domain stay until a daily retry deletes the domain from Amazon SES. These records hold no customer data.

postpurchase.net never sends email to buyers. The weekly summary email to merchants is not available yet. When a merchant on a paid plan turns it on, it comes from digest@summary.postpurchase.net through Cloudflare Email Sending, to the store’s contact email (read when the summary is sent) or to an address the merchant enters. It holds short points and a link to the app, with no attachments and no survey data, and it has an unsubscribe link.

Webhooks, the REST API and AI clients

On the Pro and Scale plans, a merchant can send survey data to their own systems, and read it with their own tools:

When a merchant connects an AI client or uses an API key, survey data, including order IDs and scrubbed written answers, goes to that tool on the merchant’s instruction, under the merchant’s own account with that provider.

We store API keys and OAuth codes and tokens only as SHA-256 hashes: API keys (with a name, the last 4 characters, and when the key was created and last used), access tokens (valid for 1 hour), refresh tokens (30 days, replaced at each use), authorization codes (5 minutes) and connection codes (10 minutes). For each registered AI client, we keep its name and redirect addresses. We delete a registration that is not used within 1 day.

To stop abuse, the app counts wrong connection codes for each IP address, and allows at most 20 client registrations per hour from one IP address. For this it keeps only a SHA-256 hash of the IP address, never the address itself: for 15 minutes for connection codes, and for about 1 hour for registrations.

The access log records each API read, each AI client tool call and each AI client connection (see “What we store about merchants”). Revoke and Disconnect take effect at once. A downgrade or an uninstall stops access at once. We delete all keys, tokens and registrations when we delete the store’s data.

Where it is processed

The app runs on Cloudflare, at v2.postpurchase.net. Answers and settings are stored in Cloudflare. An export file is stored in Cloudflare, can be downloaded through a private link for 15 minutes, and is deleted within about an hour after that. Shopify provides the order data. On paid plans, Anthropic processes the data listed under “AI features”, through the Claude API. When you write to support@postpurchase.net, your message is kept in our mailbox at Fastmail.

When a merchant uses reminder emails from their own domain (not available yet), Amazon SES gets the buyer’s email address and the message, and Amazon SNS carries bounce and complaint notices from Amazon SES to the app. When a merchant uses the weekly summary email (not available yet), Cloudflare Email Sending gets the merchant’s address and the message. Klaviyo, Shopify Flow, webhooks, API clients and AI clients get data only when the merchant connects them; they are the merchant’s own tools, under the merchant’s own accounts.

Who is responsible

For buyers’ answers, the merchant decides what the survey asks and how long answers are kept. The merchant is the controller of that data, and we process it on the merchant’s behalf. For merchants’ own account data, we are the controller.

Deletion requests

We handle Shopify’s privacy requests. When a buyer asks a merchant to delete their data, Shopify tells us which orders are affected, and we delete the answers and order IDs for those orders. Daily totals that were already made stay: they hold only counts and sums for each day and answer, with no order ID. Tags and answers that were already added to an order belong to the merchant’s order in Shopify, and the app does not remove them.

When a merchant uninstalls the app, Shopify asks us to delete the store’s data about 48 hours later, and we delete all of it, including the plan and subscription records.

When a buyer asks for a copy of their data, we have no names or contact details to send. Answers are linked only to an order ID, and the merchant can see them on the order in Shopify.

Buyers who want their answers deleted can ask the store they bought from, or write to us at the address below.

Contact

Write to support@postpurchase.net.