If you ship software today, especially in Europe, you are painfully aware that you live in two worlds at once: your product team demands seamless session continuity to understand user behavior, while your privacy team mandates that you don't touch browser storage until you know you are allowed to.
Many users ignore, reject, or bounce at the sight of cookie banners. If you tie your core user experience to consent, you are artificially restricting your own product insights. For years, SaaS teams have been stuck choosing between two bad options: defer everything until after a user opts in (accepting massive blind spots in product analytics), or write identifiers early and pray you don't face compliance exposure.
As a feedback engine, this bottleneck was unacceptable to us. If a user clicks a "Book a Demo" button or tries to "Report an Issue," they shouldn't have to navigate a legal consent banner just for you to load the feedback form.
That is why we engineered Cookieless Mode. We completely decoupled our SDK's functional utility from user tracking, allowing you to capture high-intent, manual in-app feedback instantly, compliantly, and without waiting for a consent click.
The Power of Zero-Friction Feedback
When you remove the cookie banner dependency, you unlock an entirely new level of user engagement. Because you no longer need to wait for consent to load a form, you can embed high-context feedback loops directly into your product's flow.
Here is what Cookieless Mode enables you to do, instantly and compliantly:
- Capture High-Intent Actions: Let users report a bug, request a feature, or contact support instantly without session tracking or login.
- Optimize Conversion Paths: Collect demo requirements before users book a sales call, or capture pricing objections before they bounce from the pricing page.
- Contextual In-App Insights: Ask users to rate documentation, report broken links, or drop a quick emoji reaction on a support article ("Was this helpful?") without tracking them.
- Critical Journey Feedback: Capture exit intent feedback, ask for cancellation reasons during churn, or evaluate the checkout/payment experience in real-time.
- Niche & Anonymous Channels: Run beta-testing feedback anonymously, gather instant API/SDK feedback from developers, or even create anonymous compliance/ethics reporting channels.
How We Achieved It: The Wire Protocol
We didn't just build a toggle; we fundamentally changed how our SDK talks to the server.
Under Article 5(3) of the ePrivacy Directive, storing or accessing information on a user's terminal device requires meeting specific conditions, which usually means getting consent for non-essential storage. Furthermore, the European Data Protection Board's Guidelines 2/2023 on the technical scope of Art. 5(3) extend this analysis beyond traditional HTTP cookies.
To respect this, our SDK explicitly signals when it lacks identity.
- On initialization, the SDK absolutely does not generate device or session UUIDs.
- Instead, until you explicitly establish an identity, every outgoing request carries an all-zero "nil sentinel" in the tracking headers (
00000000-0000-0000-0000-000000000000). - The request body stays entirely minimal, preventing any User-Agent-derived enrichment before consent is given.
This plain-text nil sentinel is intentional. It proves to privacy engineers, reviewers, and your CSP that no opaque tracking identity has been established yet.
Server-Side Intelligence: Deterministic Daily IDs
If the client isn't sending an ID, how do we prevent our pipelines from breaking? The magic happens server-side.
When our server receives these nil headers without a user name, it takes over to provide bounded session semantics so that your in-app feedback forms still function. It generates a deterministic UUID derived from a hash of the organization ID, project ID, client IP, User-Agent, and—crucially—the UTC calendar date.
Including the UTC calendar date is a deliberate privacy-by-design decision.
- Without a time component, an ID derived from an IP and User-Agent would act as a durable fingerprint across multiple days.
- By forcing a daily rotation at midnight UTC, we prevent sticky tracking.
- This aligns directly with the GDPR's storage limitation principle (Art. 5(1)(e)) and data protection by design (Art. 25).
Note: While cookieless mode drastically reduces compliance friction, the server still processes the IP and User-Agent to generate these same-day IDs; your privacy notice and lawful basis analysis still apply depending on your jurisdiction.
Honest Trade-offs
We are engineers, and we know nothing is free. Moving away from persistent client-side storage comes with architectural trade-offs:
- Inflated Unique Counts: Because IDs rotate daily, a single returning user will appear as a new unique visitor on different days, meaning weekly or monthly uniques will be inflated.
- No Cross-Device Stitching: Without explicitly identifying the user, you cannot link sessions across different browsers or devices for the same person.
- Potential Hash Collisions: Users on the same corporate network with the exact same browser version might hash to the same synthetic ID within a single day.
- Richer Features Require Identity: Features that depend on persistent state, cross-session deduplication, or deep user-level analytics still require
startSession()oridentifyUser()to run first.
Reimagining the Initialization Flow
Traditionally, launching specific in-app feedback forms via an ID or slug required a persistent session ID. To get that ID, you had to wait for cookie consent. This often meant writing complex, asynchronous callback logic just to ensure your "Report an Issue" button worked.
We changed the paradigm. With our cookieless architecture, you simply initialize the SDK.
Before:
// Waiting for CMP consent before doing anything useful
CMP.onConsent(function() {
encatch.startSession();
encatch.openFeedback('issue-report');
});After:
// Zero friction. Just initialize and go.
encatch.init('your-key');
encatch.openFeedback('issue-report');That's it. There is no need to call startSession or identify first. Users can immediately interact with manual feedback forms out of the box.
The Bottom Line
You shouldn't have to sacrifice user experience and critical product feedback at the altar of cookie banners. By adopting a transparent, nil-sentinel protocol and relying on daily-rotating server-side computation, we've built an in-app feedback engine that respects user privacy without breaking your product's flow.
It's time to stop waiting for consent to start listening to your users. Initialize the SDK, drop in your manual feedback triggers, and let the product speak for itself.
Ready to build a friction-free feedback loop? Check out our developer documentation to get started with Cookieless Mode today.