1import{w as r,j as e}from"./chunk-LFPYN7LY-7q4sejV_.js";const s="Privacy Policy â FormGuard",t="How FormGuard handles merchant and customer data, including the contact form messages its AI spam filter blocks.",n=()=>[{title:s},{name:"description",content:t},{property:"og:title",content:s},{property:"og:description",content:t}],i=r(function(){return e.jsxs("div",{style:{maxWidth:"680px",margin:"0 auto",padding:"2rem 1rem",fontFamily:"system-ui, sans-serif",lineHeight:1.7},children:[e.jsx("h1",{children:"Privacy Policy"}),e.jsxs("p",{children:[e.jsx("strong",{children:"FormGuard"})," â Contact Form Spam Blocker"]}),e.jsx("p",{children:e.jsx("em",{children:"Last updated: September 2026"})}),e.jsx("h2",{children:"What we collect"}),e.jsx("p",{children:"For every contact form submission we check, we record whether it was flagged as spam or let through, and why (bot trap, timing, keyword match, repeated submissions, or the AI spam filter). These records don't identify the person who sent the message. On stores with the AI spam filter, the record also holds the filter's spam score."}),e.jsx("p",{children:"We only store a customer's message and email address when the AI spam filter blocks it. The AI spam filter runs on stores with the Pro plan, and on stores that installed FormGuard before paid plans existed. Messages stopped by the bot trap, timing checks or keyword list never leave the customer's browser apart from the pass/fail record above, and on stores without the AI spam filter neither do messages that pass."}),e.jsx("h2",{children:"Merchant data"}),e.jsx("p",{children:"Merchants can configure a list of blocked keywords through the admin dashboard. These keywords are stored in a database scoped to each individual store. We also store a simple on/off preference for spam protection."}),e.jsx("h2",{children:"Customer data"}),e.jsx("p",{children:"On stores without the AI spam filter, FormGuard doesn't store any customer personal data. The checks run in the customer's browser and only the pass/fail record reaches our server."}),e.jsx("p",{children:"On stores with the AI spam filter, once a message passes the browser checks, the text the customer typed into the message box goes to our server for one more check. On a form with no message box, the other free-text fields are sent instead, leaving out any field for a name, phone number or email address. If the message is blocked, we store its text and the email address the customer entered, so the merchant can review it and reply if it was a real customer. If it isn't blocked, we store neither. The customer's IP address is used in memory for rate limiting and is never written to our database."}),e.jsx("h2",{children:"Data sharing"}),e.jsxs("p",{children:["We don't sell customer or merchant data. The AI spam filter sends message text, without the customer's email address, to"," ",e.jsx("a",{href:"https://typesafe.ai",children:"TypeSafe AI"}),", which processes it on our behalf to return a spam score, under its"," ",e.jsx("a",{href:"https://typesafe.ai/data-processing",children:"data processing agreement"}),", which only allows TypeSafe to use it as we instruct. We share nothing with any other third party."]}),e.jsx("h2",{children:"Data retention"}),e.jsx("p",{children:"Spam event records are deleted after 90 days. The dashboard only ever reports on the last 7 days. Blocked messages and the email addresses stored with them are deleted after 30 days. When a merchant uninstalls the app, all their data (keywords, settings, spam events and blocked messages) is permanently deleted immediately."}),e.jsx("h2",{children:"GDPR compliance"}),e.jsx("p",{children:"FormGuard responds to all mandatory Shopify GDPR webhooks:"}),e.jsxs("ul",{children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Customer data request:"})," we look up the blocked messages stored under that customer's email address. If any exist, the merchant is shown the request in FormGuard with a file of those messages to send to the customer. The request itself is deleted once the merchant marks it sent, or after 30 days."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Customer data erasure:"})," we delete every blocked message stored under that customer's email address."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Shop data erasure:"})," we permanently delete all of the store's data."]})]}),e.jsx("h2",{children:"Contact"}),e.jsxs("p",{children:["For questions about this privacy policy, contact us at"," ",e.jsx("a",{href:"mailto:[email protected]",children:"[email protected]"}),"."]})]})});export{i as default,n as meta};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.