loupsio

Cookie Banner and Visitor Information Template

Draft document, to be reviewed by a lawyer before publication.

Effective date: [EFFECTIVE DATE]

This kit helps merchants obtain their visitors' consent before using Loupsio, and inform them. It contains:

  1. the short banner text;
  2. the description of the "Session analysis" purpose for your consent management tool;
  3. a paragraph to add to your privacy policy;
  4. the code that connects consent to Loupsio.

The text in square brackets is for you to complete: [SHOP NAME], [SHOP EMAIL], [RETENTION PERIOD], [LINK TO COOKIE SETTINGS]. The paragraphs that start with "[Keep this paragraph only if…" depend on your site's settings (Settings › Privacy) and on the tools you connect to Loupsio. Adapt this text to your shop: you are responsible for informing your visitors.

Loupsio does not set cookies. But it keeps an identifier in the visitor's browser (sessionStorage, and localStorage if you turn on the recognition of returning visitors), reads the identifier that your analytics or marketing tools have given the visitor if you connect them to Loupsio, and records their browsing. The cookie rules (Article 82 of the French Data Protection Act, which implements Article 5(3) of the ePrivacy Directive) apply to anything stored or read in the browser, with or without cookies.

We take the most cautious position: session recording is not exempt from consent. The visitor must accept it before it starts, as the CNIL (the French data protection authority) recommends for trackers that are not strictly necessary.

In practice:

  • install the script in consent mode (data-consent="required"): nothing about the visit is recorded, sent or written in the browser, and no survey is shown, until the visitor agrees;
  • the Reject button must be as visible and as easy to use as the Accept button;
  • the visitor must be able to withdraw consent at any time, as easily as they gave it;
  • do not classify Loupsio as a "strictly necessary" tracker.

Note for legal review. Confirm this position against current CNIL guidance, in particular the conditions of the exemption for audience measurement, which do not appear to be met by session recording.

Note for legal review. The 13-month visitor identifier, linking visits to the customer number, and sending frictions to Google Analytics 4, Segment or Klaviyo while reading their cookies go beyond analysing a single visit. Decide whether they can stay within the "Session analysis" purpose or require a separate purpose and consent, in particular for marketing tools (Klaviyo, Segment).

1. Short banner text

If your banner covers other purposes (advertising, social media, etc.), add this text to the list.

Help us improve our site

With your consent, we record how you browse (pages viewed, clicks, scrolling) to spot what isn't working and fix it. What you type into forms (email, password, bank card, etc.) is never sent. You can change your mind at any time. [Learn more]

[Reject] [Customise] [Accept]

FieldSuggested content
Purpose nameSession analysis
DescriptionRecord how you browse this site (pages viewed, clicks, mouse movements, scrolling, page content as it is displayed, how you use forms, technical errors) to spot difficulties and improve the site. You may be invited to answer a short survey; your answer is then linked to your visit. What you type into forms is masked in your browser and never sent. [Add if you turn on "Recognise returning visitors": A random identifier kept for 13 months in your browser links your visits together.] [Add if you identify your customers: If you are signed in to your account, your visit is linked to your customer number.]
CategoryStatistics / audience measurement, subject to consent
ProviderLoupsio, published by [PUBLISHING COMPANY], processor for [SHOP NAME]
Where the data is storedEuropean Union: Netherlands and France (except for the options and tools described in the paragraph in section 3)
Data retention period[RETENTION PERIOD] (90 days by default, adjustable from 30 days to 2 years)
LinkYour privacy policy

Trackers used by Loupsio (no cookies):

NameLocationPurposeDuration
loupsio:sessionsessionStorageRandom visit identifier, referring site and campaign of the visitCleared when the tab is closed; renewed after 30 minutes of inactivity
loupsio:usersessionStorageCustomer number, if the visitor is identifiedCleared when the tab is closed
loupsio:cfg:<site identifier>sessionStorageYour site's settings, with no data about the visitorCleared when the tab is closed
loupsio:shop:<domain>sessionStorageShopify app: your shop's Loupsio site, with no data about the visitorCleared when the tab is closed
loupsio:s:<identifier>localStorageNot showing a survey that has already been seen30 days if the survey was closed without an answer, 1 year if it was answered
loupsio:vidlocalStorageOnly if you turn on "Recognise returning visitors": random visitor identifier, to measure returns13 months from its creation, not extended

If you connect Google Analytics 4, Segment or Klaviyo to Loupsio, the script also reads, without changing them, the identifiers that these tools have set: the _ga cookie, Segment's anonymous identifier (ajs_anonymous_id), the __kla_id cookie. Mention this in the description of Loupsio and of these tools in your consent management tool.

The CNIL recommends keeping the visitor's choice (consent or refusal) for 6 months, then asking again.

3. Paragraph for your privacy policy

Session analysis (Loupsio)

If you agree, we record how you use our site: pages viewed, clicks, mouse movements, scrolling, page content as it is displayed to you, and how you use forms (fields used, time spent, fields refused, form sent or abandoned, without what you type in them). We also collect technical information: device type, browser, language, window size, page errors and speed, the page's requests that fail or are slow, browser error messages, the site you came from and any advertising campaign, the version of our A/B tests shown to you. If you answer a survey or leave feedback, your answer is linked to your visit.

What you type into forms (email, password, bank card, address, etc.) is masked in your browser and never sent. Parameters in page addresses are removed. The content of the page's requests is never collected. Your IP address is not kept.

Why? To spot what bothers our visitors (errors, buttons that don't respond, difficult steps) and improve our site.

Legal basis: your consent. You can withdraw it at any time from [LINK TO COOKIE SETTINGS]. Withdrawing it stops the recording.

Provider: we use Loupsio, published by [PUBLISHING COMPANY], which processes this data on our behalf, as a processor. The data is hosted in the European Union (Netherlands and France).

Storage in your browser: no cookies. A random visit identifier is kept in the tab's memory (sessionStorage) and cleared when the tab is closed. If you are shown a survey, a date is kept in your browser (localStorage) so that it is not shown to you again, for 30 days, or 1 year if you answered it.

[Keep this paragraph only if you turn on "Recognise returning visitors":] A random identifier is kept in your browser (localStorage) for 13 months at most, to know whether you come back to our site. It links your visits together. It is not extended on each visit.

[Keep this paragraph only if "Identify logged-in customers" is on or if you call loupsio('identify', …):] If you are signed in to your customer account, your visit is linked to your customer number. This lets us find and erase your visits at your request, and measure whether our customers come back.

[Keep this paragraph only if you record order amounts, with the Shopify app or loupsio('event', 'commande', …):] If you place an order, its amount [, currency and number] are linked to your visit, to estimate what the difficulties met on the site cost us in sales.

[Keep this paragraph only if you connect Google Analytics 4, Segment or Klaviyo to Loupsio:] The difficulties detected during your visit (type, page, element concerned) are sent to [TOOL NAME], linked to the identifier that this tool has already given you. To do so, Loupsio reads this identifier in your browser ([_ga cookie / Segment anonymous identifier / __kla_id cookie]). [WHERE THE TOOL PROCESSES THE DATA AND SAFEGUARDS FOR ANY TRANSFER OUTSIDE THE EUROPEAN UNION.]

[Keep this paragraph only if you export data to your data warehouse:] A daily copy of visits, survey answers and feedback is kept in [WAREHOUSE NAME AND LOCATION], for [PERIOD].

Retention period: [RETENTION PERIOD], then automatic deletion.

[Keep this paragraph only if you enable a Loupsio Claude option; remove the sentences for the options you do not enable:] Some data may be sent to Anthropic PBC, in the United States, to be analysed by the artificial intelligence tool Claude. To answer our questions about the site's statistics: totals (numbers of visits, rates, page addresses, button labels). To summarise a visit: its timeline (pages viewed, elements clicked, difficulties met, forms, duration, amount ordered). To group your comments by theme: the text of the comments you leave in our surveys or our feedback button. This transfer is covered by safeguards provided for by the GDPR. Neither visit recordings nor what you type into the site's forms are sent.

Your rights: you can access your data, have it erased or object to its processing by writing to [SHOP EMAIL]. To help us find your visit, give the date, approximate time, pages visited, device used, your customer number if you were signed in to your account and, if you answered a survey or left feedback, what you wrote. [Keep this sentence only if you turn on neither the recognition of returning visitors nor the identification of customers:] No identifier follows you from one visit to the next. You can also lodge a complaint with the CNIL (www.cnil.fr) or with the data protection authority of your country.

Note for legal review. The totals sent to Anthropic for the assistant are aggregated; as a precaution, the template suggests mentioning them. The timeline of a visit and the text of comments are not aggregated, and comments may contain anything the visitor wrote: mentioning them appears necessary as soon as one of these options is enabled. To be confirmed, along with whether the purpose description in the consent management tool should mention it.

How it works

  • On page load, in consent mode, Loupsio waits.
  • When the visitor accepts the "Session analysis" purpose, call loupsio('consent', true).
  • When they reject it or withdraw consent, call loupsio('consent', false). Recording stops.
  • Loupsio does not remember the choice. On every page, your consent management tool must call loupsio('consent', true) if the visitor has already accepted.

In the <head> of all your pages, before your banner's script:

<script>window.loupsio = window.loupsio || function () { (window.loupsio.q = window.loupsio.q || []).push(arguments); };</script>
<script async src="https://app.exemple.com/loupsio.js" data-site="s-xxxxxxxxxx" data-consent="required"></script>

The first line lets you call loupsio(...) before the script has loaded. Replace the address and the s-xxxxxxxxxx identifier with those shown in the Application (Settings › General, or the Installation screen).

Step 2: call Loupsio from your banner

// When the visitor accepts the "Session analysis" purpose,
// and on every page load if their consent is already stored:
loupsio('consent', true);

// When they reject it, or withdraw consent:
loupsio('consent', false);

Generic example

The code below is pseudo-code: myBanner.whenChoiceIsKnown does not exist. Replace it with the mechanism your tool provides to be told of the visitor's choice (on page load and whenever it changes).

myBanner.whenChoiceIsKnown(function (choice) {
  // true if the visitor accepted the "Session analysis" purpose, false otherwise
  loupsio('consent', choice.sessionAnalysis === true);
});

In consent mode, the loupsio.js file is downloaded from the Loupsio server as soon as the page opens, even though it records nothing. To avoid any request to Loupsio before consent, load the script only when the visitor accepts:

function enableLoupsio() {
  if (!document.getElementById('loupsio-script')) {
    var s = document.createElement('script');
    s.id = 'loupsio-script';
    s.async = true;
    s.src = 'https://app.exemple.com/loupsio.js';
    s.setAttribute('data-site', 's-xxxxxxxxxx');
    s.setAttribute('data-consent', 'required');
    document.head.appendChild(s);
  }
  loupsio('consent', true);
}
// Call enableLoupsio() when the visitor accepts (and on every page if they have already accepted),
// and loupsio('consent', false) when they reject or withdraw consent.

Keep the window.loupsio = ... line from step 1 in the <head>.

Note for legal review. Say whether this option should become the default recommendation.

The principle is the same everywhere: declare Loupsio as a service or vendor under the "Session analysis" purpose (statistics category), then call the right line when the visitor accepts or rejects that purpose. See your tool's documentation for where to put these lines.

ToolWhere to declare LoupsioWhat to do
AxeptioAdd Loupsio as a service under a measurement or analytics purposeUsing the callback mechanism documented by Axeptio, call loupsio('consent', true) when the service is accepted (including on page load if the choice is already stored) and loupsio('consent', false) otherwise
DidomiDeclare Loupsio as a custom vendor, linked to the "Session analysis" purposeUsing the events or conditional loading documented by Didomi, call the line that matches the visitor's choice for this vendor
CookiebotPut Loupsio in the "Statistics" categoryUsing the events documented by Cookiebot for acceptance and refusal, call the line that matches the visitor's choice for this category
Shopify (Customer Privacy API)Loupsio falls under analyticsWhen the API reports that the visitor accepts analytics, call loupsio('consent', true); when it reports a refusal or withdrawal, call loupsio('consent', false). Check that your shop's consent banner is enabled for the visitors concerned. The Loupsio pixel of the Shopify app, which sends order amounts, only runs if Shopify allows analytics for the visitor.

Check your setup

  1. Open your shop in a private browsing window.
  2. Reject: browse a few pages. No new session should appear in Loupsio.
  3. Clear the choice (or open a new private window), then accept: the session should appear in Loupsio shortly afterwards.
  4. Go to another page: recording should continue without asking for consent again.
  5. Withdraw your consent from the cookie settings: recording should stop.

Also

  • Turn on “Mask all text on the pages” in Settings › Privacy, or mask with data-loupsio-mask, or exclude with data-loupsio-block, the elements that display personal data (name, address, order number on "my account" or confirmation pages). Form input is masked automatically, but text displayed on the page is recorded unless it is masked.
  • With "Pages not to record" (Settings › General), do not have the pages you do not need recorded, for example "my account" pages. "Share of visits recorded" limits recording to part of the visits.
  • Do not send email addresses, names or customer numbers in loupsio('event', ...) or loupsio('variant', ...). To link visits to a customer, use loupsio('identify', ...) with an internal customer number, never an email address or a name.
  • Choose a suitable retention period in the site settings.
  • Adapt the text above to your site's active settings (Settings › Privacy: "Recognise returning visitors", "Identify logged-in customers", "Failed requests and console errors", Claude options) and to the tools you connect to Loupsio. If you turn off "Failed requests and console errors", remove the mention of requests and browser error messages.