Privacy policy
Last updated: October 23, 2026
This policy explains what personal data TrustPlug handles, why, on what legal basis, and your rights. It applies to our website and to our plugins wherever they run — today, the Framer plugins Social Hub, Booking, Quote Calculator, Smart Pricing, Launch List, Landmark, Open Hours, Store Locator, Menu, Feedback, FAQ, Contact Bubble, Table of Contents, Accessibility, Standby Mode, Status Page and Cookie Consent.
It is written to match what the code does today, not what we might do one day. Our plugins are still in development: customer accounts are open, payments are not yet.
1. Data we collect
- Website visitors: nothing beyond what any web host sees. This website sets no cookies and loads no analytics or advertising scripts. Our hosting provider (Cloudflare) sees your IP address and the pages you request, as every web host does, to deliver the site and protect it from abuse.
- Waitlist, contact and suggestion forms: when you use one, the form sends what you typed to our own server (a Cloudflare Worker with a Cloudflare D1 database) and we store it: your email address and the plugin you asked about for the waitlist, plus your name, subject and message for the contact and suggestion forms, with the time. For rate limiting we also keep a salted hash of your IP address — never the address itself — that cannot be turned back into it. If the form cannot reach our server, the page offers to send the same text from your own email app instead; nothing is sent until you press send there.
- Plugin settings: each plugin's settings (layout, colors, rules, texts…) live in the site owner's own Framer project. Our servers only receive the few values a plugin needs to do its job on a given request: a Google Place ID, a social account's link, a street address, a Google Calendar ID or calendar (iCal) address, or a webhook address.
- Third-party public content: public opening hours from Google Places, public events from Google Calendars their owners made public or from an iCal address they supplied, and public social media profiles and posts (TikTok through Apify, the other networks from their public pages). This content is cached on Cloudflare's network so widgets load fast: 6 to 24 hours for social posts, 6 hours for opening hours, 5 minutes for calendar events.
- Feedback and votes: what a visitor chooses to send through the Feedback plugin (or a FAQ "Was this helpful?" vote) — see section 8.
- Customer accounts: if you create an account, we keep your email address, your password as a salted one-way hash (PBKDF2-SHA256, never the password itself), the date you created it, the date you confirmed your email and, if you add one, your profile picture (reduced to 128×128 pixels in your browser before it is sent; you can remove it at any time). To protect sign-up from abuse we also keep a salted hash of the IP address used to create it (never the address itself). Each time you sign in, on the website or in the TrustPlug plugin inside Framer, we keep a hash of the session token with its creation and expiry dates and the place it was opened (website or Framer); the token itself stays in your browser (section 16). We use your email to confirm your address, to let you reset your password, and to show the plans you bought.
- Account emails: the confirmation link and the password-reset link are sent to the address you enter, through our email provider Resend, from [email protected]. The link carries a one-time code that we store only as a hash and that expires (24 hours to confirm, 1 hour to reset).
- Payments: not open yet. When they open, payments will be handled by Creem, our merchant of record: Creem collects your card details, your billing information and the VAT, and issues your receipts, under its own privacy policy. We will never see or store your card. Creem tells our server what was bought (product, plan, amount, currency, country, dates, subscription status) together with your email; we keep that record with a salted hash of your email instead of the email itself, which is how your account finds your plans, plus Creem's customer and subscription identifiers so that, from your account page, you can stop a subscription or open Creem's portal for your invoices and payment method (our server asks Creem to do it; your card never passes through us). These records are also our accounting records.
2. Legal bases (GDPR Art. 6)
| Purpose | Legal basis |
|---|---|
| Your customer account: creating it, confirming your email, signing in, resetting your password, showing your plans | Performance of a contract (the service you sign up for) |
| Recording purchases reported by our payment provider | Performance of a contract, and our legal obligation to keep accounting records |
| Running the plugins a site owner configured (fetching reviews, hours, maps, feeds; geolocating a visit for a rule) | Legitimate interest, and performance of the owner's request |
| Spam and abuse protection (rate limits, honeypot) | Legitimate interest |
| Answering your emails | Legitimate interest |
| Telling you when a plugin you asked about launches (waitlist) | Your consent, given by ticking the box on the waitlist form — withdraw it at any time with the unsubscribe link or by writing to us |
| Keeping the website secure | Legitimate interest |
3. Who is responsible for what
Controller. TrustPlug is the controller of the data described in section 1 for our own website and inbox. Contact for any privacy request: [email protected].
Two roles. For anything a plugin does on a published site — showing reviews, checking a visitor's country, collecting feedback — the site owner is the controller and we act as their processor, on their documented instructions (their settings). The site owner is responsible for giving their own visitors any privacy notice, and for any consent their jurisdiction requires. A data-processing addendum is available on request.
4. Opening hours & calendar (Open Hours)
Open Hours fetches the opening hours of the place you connect, and — if you connect one — the events of a Google Calendar made public, or of any calendar whose iCal (.ics) address you give us. We retrieve all of it server-side, using our own Google keys, which are never placed in your published page.
Requests your published page makes. The widget calls our API (a Cloudflare Worker) and nothing else on our side:
| Request | Why | What is sent |
|---|---|---|
| /business-hours | Load weekly hours and the next days' exceptions, holidays included | The Google Place ID you configured |
| /calendar-events | Load closures or special openings from a calendar | The Google Calendar ID, or the iCal address, you configured |
These values are the site owner's, not the visitor's. There is no per-visitor check, no IP geolocation, no counter and no profile for these two plugins. Like any web server, our API receives the visitor's IP address in order to answer; our code does not store it or write it to a log. One thing to know: reviewers' profile photos are loaded by the visitor's browser straight from Google's servers, so Google can see that request.
5. Social media accounts (Social Hub)
Social Hub fetches the public profile and posts of the social media accounts you connect (name, picture, follower count, the image or video link, caption and post link). The latest TikTok videos are retrieved through Apify, a third-party scraping service; YouTube, Snapchat, LinkedIn, X and the other networks are read from their public pages, feeds and embeds. Everything is cached (24 hours through Apify, 6 hours otherwise) so we do not re-fetch on every page view. We never ask for, receive or store a password, and the plugin does not log in to any network. Only connect an account you own or are authorized to represent, and make sure you have the right to show its content on your site.
We do not copy the pictures or videos to our servers. The visitor's browser loads them directly from each network's content servers (and plays videos in the network's own player), so that network can see the request — including the visitor's IP address. If you need to avoid that, do not use this plugin on your site, or mention it in your own privacy notice. Our API itself performs no per-visitor check and sets no cookie.
6. Maps (Landmark)
Landmark sends the address you typed to our API, which builds the address of a Google Maps embed and returns it. The map itself is Google's: the visitor's browser loads it from Google, so Google receives the visitor's IP address and may read or set its own cookies, under Google's privacy policy. The Maps Embed API itself is free for us; the key it needs is restricted to that one product. If the embed cannot load, the plugin falls back to a plain link to Google Maps. If your jurisdiction requires consent before loading Google content, you can place the plugin behind your own consent banner.
7. Visitor checks (Standby Mode, Feedback)
When a rule depends on where the visitor is, the page asks our API for the visitor's approximate location. Our servers answer from the data Cloudflare attaches to the connection (country, and where available region, city and whether the country is in the EU). The IP address is used for that lookup only. Nothing is stored and there is no individual record of the visit. No automated decision produces legal or similarly significant effects: the check only decides which page a browser shows.
- Standby Mode and the Feedback whitelist ask our API for the visitor's own IP address and compare it, in the visitor's browser, with the list of addresses you entered. Because of that, the list is part of your published page's code: only add addresses you are comfortable having there.
- Standby Mode keeps, in the visitor's own browser, the moment its "starts now" countdown began. This is functional storage only; it is not shared with us and not used for tracking.
8. Feedback & FAQ votes
Feedback asks a visitor how well the site helped them, and optionally to report a problem, suggest an idea or write a message. A visitor can answer with a single click, with no email and no text. Each answer is sent to our API, which checks it and forwards it to the destination the site owner chose.
- What a submission contains: the rating or choice, the category, the message and email only if the visitor typed them, the site name you set, and a timestamp. If the site owner turns on "Add page info", it also contains the page address and title, the device type (mobile or desktop), the window size and the browser language.
- Where it goes: to the webhook address the site owner entered — Slack, Discord, Microsoft Teams, Zapier, Make, n8n or a Google Sheet (via Apps Script). The destinations we accept are limited to a fixed list of hosts. The site owner is responsible for the destination service.
- Storage: unless the site owner turns "Keep in dashboard" off, we keep each answer (everything listed above, including the message and the email if the visitor typed them) for up to 180 days, so that the site owner can read it in their private dashboard and see the site's average rating. The dashboard has no account: it opens only through a link that we put at the end of each answer sent to the owner's own webhook, so only people who can read that channel can open it. The site owner can erase one answer or all of them at any time, or cancel the link and get a new one. Answers older than 180 days are erased. Without a webhook, nothing is kept.
- Spam protection: a hidden field that only bots fill in, and a limit of 6 submissions per 10 minutes. The limit is a counter held in Cloudflare's cache under a key made from the visitor's IP address and the site name, and it disappears after 10 minutes.
- FAQ votes ("Was this helpful?"): if the site owner enables votes and enters a webhook, a vote carries the question, the answer given and the page address, and is sent the same way. A visitor's votes and their last answer or "not now" are remembered in their own browser so they are not asked again straight away.
9. Cookie consent (Cookie Consent)
Cookie Consent runs entirely in the visitor's browser and sends nothing to our servers. It keeps the visitor's choice (which categories were accepted, and when) in a first-party cookie named tp_consent, with a copy in the browser's local storage, on the site where it runs and for the period the site owner sets (6 months by default, 13 at most). Once a category is accepted, it loads the tracking tools the site owner configured (for example Google Analytics or the Meta Pixel), which are then governed by those companies' own policies. When a category is refused or withdrawn, it deletes those tools' cookies on that site.
10. Booking, Quote Calculator, Launch List, Status Page and the other plugins
- Booking: when a visitor sends a request, the service, the time, what they typed (name, email, phone, note, the answer to the site owner's own question) and the site name go to our API, which forwards them to the destination the site owner chose. So that two visitors cannot ask for the same time, we keep the time, the service, a hash of the visitor's email (never the email itself) and a code for the site (a hash of the site name and the destination; the destination address itself is not stored). This is deleted 30 days after the appointment, or as soon as the site owner frees the time with the link sent with the request. Busy times are read from the site owner's calendar as described for Open Hours.
- Quote Calculator: the answers, the estimate and the contact details the visitor typed go to our API, which forwards them to the site owner's destination. Nothing is stored.
- Launch List: we store each sign-up (the email, the first name if the site owner asks for it, the person's own invite code, the code that brought them, how many people they brought, and the date) under a code for the list (a hash of the site name, the list name and the destination), so that places and referrals can be counted. Each sign-up is also forwarded to the site owner's destination. The site owner is the controller of the list; we keep it until they ask us to delete it. The visitor's own invite code is also kept in their browser, so they see their place when they come back.
- Status Page: our server receives only the public addresses the site owner chose to watch. It checks each one every 5 minutes and keeps, per address and per day, the number of checks, how many answered, how many were slow and the total response time, for up to 100 days. An address nobody has looked at for 14 days stops being checked, and after 45 days it is deleted with its history. No information about visitors is kept.
- Smart Pricing and Store Locator ask our API for the visitor's approximate location, as described in section 7: the country, to show prices in its currency, and the city, to sort places by distance. Nothing is stored. Exchange rates come from the European Central Bank's daily rates, through the free frankfurter.dev service, and contain no personal data. Store Locator sends the addresses the site owner typed to our API, which locates them through OpenStreetMap (Nominatim) and caches the result for 30 days. 'Near me' uses the position the visitor's browser shares, only inside their browser: it is never sent to us. The map is loaded by the visitor's browser from Google Maps or OpenStreetMap, which can see that request.
- Accessibility, Table of Contents, Contact Bubble and Menu send nothing to our servers. Accessibility keeps the visitor's reading settings in their own browser; the dyslexia font is downloaded from jsDelivr only when a visitor turns it on, so jsDelivr can see that request. Contact Bubble's buttons are plain links that open the visitor's own apps (WhatsApp, phone, email…).
- Spam protection: Booking, Quote Calculator and Launch List accept a few requests per visitor and site every 10 minutes (4, 6 and 5). The limit is a counter held in Cloudflare's cache under a key made from the visitor's IP address and the site name, and it disappears after 10 minutes.
11. The live demos on this website
Each plugin page runs the real plugin. To do that, your browser calls our API with the demo's public values: a public Google Place ID (Open Hours), a public address (Landmark), and NASA's public social media accounts (Social Hub). Smart Pricing asks for your country and today's exchange rates, and Store Locator for your city and the location of its sample addresses. The demos for Feedback, Booking, Quote Calculator and Launch List send nothing: they run in test mode on this site, and Status Page shows sample data. Standby Mode runs in preview mode with a simulated visitor. The same rules as above apply to what the API sees.
12. How we use data
Only to run the service: fetching and caching what a plugin displays, applying a rule, relaying an answer, protecting against abuse, and answering you. We never sell or rent personal data, we do not use it for advertising, and we do not build profiles of site owners or their visitors.
13. Processors & international transfers
| Provider | Purpose | Location |
|---|---|---|
| Cloudflare | Website hosting, our API (Workers), our database (accounts, waitlist, messages, purchase records, held booking times, Launch List sign-ups, Status Page history), edge cache, rate-limit counter, visitor country | EU / USA |
| OpenStreetMap (Nominatim) | Locating the addresses a Store Locator site owner typed | EU (UK) |
| frankfurter.dev (European Central Bank rates) | Daily exchange rates for Smart Pricing (no personal data) | EU |
| jsDelivr | Serves the dyslexia font, only when a visitor turns it on in Accessibility | Worldwide (CDN) |
| Google (Places, Maps Embed, Calendar) | Reviews, hours, maps and public calendar events | USA |
| The calendar provider you connect (iCal address) | Fetching the events of the calendar whose address you gave us (Apple, Microsoft, Proton, Nextcloud…) | Depends on the provider |
| Apify | Retrieval of the latest public TikTok videos | EU / USA |
| The social networks you connect (YouTube, TikTok, X, LinkedIn, Snapchat, Facebook…) | Deliver the images, videos and embeds a visitor's browser loads | Depends on the network |
| The destination you choose (Slack, Discord, Teams, Zapier, Make, Google Sheets, Formspree…) | Receives Feedback answers, FAQ votes, booking and quote requests and Launch List sign-ups | Depends on the service |
| Resend | Sends account emails (confirmation, password reset) from [email protected] | EU (Ireland) |
| Creem | Merchant of record for payments, once they open: card details, billing, VAT, receipts | EU / USA |
| Gmail (Google) | Our support inbox | USA |
Where a provider is outside the EU/EEA, transfers rely on the safeguards that provider offers under the GDPR (an adequacy decision or Standard Contractual Clauses). We use these providers only for the purposes above.
14. Retention & deletion
Cached social posts expire after 6 to 24 hours, opening hours after 6 hours, calendar events after 5 minutes, located addresses after 30 days. The rate-limit counter lasts 10 minutes. Held booking times are deleted 30 days after the appointment; Launch List sign-ups are kept until the site owner asks us to delete the list; Status Page history is kept for up to 100 days (section 10). We do not keep visitor IP addresses. Waitlist addresses are kept until the plugin you asked about launches and we have written to you once, or until you unsubscribe or ask us to delete them; contact and suggestion messages are kept for 12 months after the last exchange. The hash of your IP address used for rate limiting is kept with the entry it belongs to and deleted with it. Every mail we send carries a one-click unsubscribe link, and an address can be erased entirely, messages included, on request. Customer accounts are kept until you delete them; an account whose email is never confirmed is erased after 30 days. Sessions expire after 30 days, or when you sign out. You can delete your account yourself in one click from your account page (/account): any subscription still running is stopped first (it stays active until the end of the period already paid, then ends), and your email, password hash, profile picture, sessions and pending links are erased at once. Purchase records are kept for 10 years, as French accounting law requires, with your email only as a salted hash. To have any other data deleted, write to us at the address below; we answer within 30 days, except for records we must keep by law.
15. Your rights
Under the GDPR and similar laws you can ask to access, correct, delete, restrict or object to the use of your data, to receive it in a portable format, and to withdraw consent where processing relies on it. Email [email protected]. You can stop a subscription, open your invoices, or delete your account yourself, in one click, from your account page. You can also complain to your data protection authority — in France, the CNIL. If your data was handled by a plugin on a site you visited, send your request to that site's owner (the controller); they can instruct us as their processor.
17. Security
Everything is served over HTTPS. Passwords are stored only as salted PBKDF2 hashes, and session and email-link codes only as hashes. Sign-up, sign-in and password-reset requests are rate-limited, and an account works only once its email is confirmed. Our Google and Apify keys are held only on our servers and are never placed in a published page. Webhook destinations are restricted to a fixed list of hosts, and messages relayed to chat tools are escaped so they cannot trigger mentions. No system is perfectly secure; if a breach affects you, we will tell you and the relevant authority as the law requires.
18. Changes & contact
Our plugins are still in development, and this policy describes how the code behaves today. We will update it — and the date above — whenever that changes, in particular before payments or VPN detection go live. Questions or requests: [email protected].