Cookie banner
Layouts, categories and consent
A record of every choice.
Kukie.io keeps every answer your banner collects as a dated record with a consent ID. It shows acceptance by category and country, so you can see what each banner change did.
Watch the explainer
See what each level counts, from the answers your banner collects to the page loads where nobody answered.
2 minutes 17 seconds, narrated, with captions in the player. The sites and rules in it are examples.
Two jobs
One you ask yourself after a change: are people accepting, and has that moved? The other arrives in writing from someone else, about one visitor on one day.
Aggregate figures from every answer your banner has collected: the split between accepting, refusing and choosing categories, how it moves day by day, which categories visitors are willing to allow and how any of it differs by country.
It is the half you look at by choice. It tells you what your measurement really covers, which is not the same as what your analytics tool reports, and whether a change to the banner made any difference.
Every decision is stored on its own, with a consent ID you can look up later to confirm what that visitor chose. Refusals are stored as carefully as acceptances, and so is a later change of mind.
It is the half you need on the day a complaint, a client questionnaire or a supervisory authority asks you to demonstrate that consent was given. It cannot be created after the fact.
Basic analytics, on every plan
There is nothing to set up. From the moment the banner is live, every answer feeds these views for the site you are looking at.
How many decisions came in over the period, and what share accepted everything, refused everything or chose category by category. The third figure shows how many people engage with the detail.
The same split over the last 7, 30 or 90 days, or any date range you enter. You can see the line before and after the day you changed the wording.
Visitors often allow analytics and refuse marketing. Your measurement and your advertising run on different consent rates on the same site.
Decisions grouped by country, each with its own accepted, refused and customised counts. If you set a different rule for each region, you see their effect side by side.
Today's figures are read straight from the incoming decisions, with no overnight step. Publish a banner change in the morning and watch the answers arrive the same afternoon.
Organisation owners and admins can download the trend and the country figures as a CSV file, for a spreadsheet or a monthly report.
The dashboard does not give you a target to hit. Acceptance rates vary with the audience, the region, the traffic source and how the banner is written, so a figure that would be alarming on one site is normal on another. The articles at the end of this page look at how to read them.
Advanced analytics
A consent record starts when a visitor answers. Advanced analytics also counts the page loads where nobody did, so you can see how often the banner is shown, how often it is answered and with which button.
Advanced analytics is included on the Unlimited plan. It is off until an owner or admin turns it on for a site in Site Settings, and counting starts from that moment.
How often the banner or the cookie wall was shown, the share of those displays that got an answer and the share that got none.
Whether each choice came from the first layer, the preferences panel or the cookie wall, and which button made it, with Close counted apart from Reject all.
First answers kept apart from visitors who come back and change their choice, with withdrawals counted on their own.
The share of choices that allow each optional category, and each service on sites that ask for consent per service, day by day.
Banner displays, the interaction rate and the share of Accept all by country, region, device type, browser and banner language. A row with fewer than 10 displays is left out.
How many page loads already carry a stored choice, and in opt-out regions such as US states, how often Global Privacy Control or Do Not Track opted a visitor out automatically.
Basic analytics counts the answers. Advanced analytics adds what happened on the page loads around them, for the sites you turn it on for.
| Feature | Basic analytics | Advanced analytics |
|---|---|---|
| Plans | Every plan | The Unlimited plan |
| What it counts | The choices visitors make | The choices, and what the banner did on every page load |
| Accept, reject and custom rates | Included | Included |
| Daily, weekly or monthly trend | Included | Included |
| Categories | How often each was allowed | Opt-in rate of each, day by day |
| Services | Not included | Opt-in rate of each, on sites that ask per service |
| Countries | The top 50, by choices | Each with at least 10 displays, with its answer rates |
| Banner displays, interaction and ignore rate | Not included | Included |
| The layer and the button behind each choice | Not included | Included |
| First choices, returning visitors and withdrawals | Not included | Included |
| Region, device, browser, banner language and consent model | Not included | Included |
| Coverage and automatic opt-outs from privacy signals | Not included | Included |
| Change on the previous period and banner version markers | Not included | Included |
| CSV export for owners and admins | The summary, trend, categories and countries | Every tab in one file |
| How it starts | On for every site from the first answer | Off until an owner or admin turns it on for a site and confirms a notice |
| Extra request from the visitor's browser | None | One small anonymous request per page load |
| What is kept | A consent record for each choice | Daily counts, one breakdown at a time |
Learn how to turn on Advanced analytics
Advanced analytics keeps daily totals for each site, one breakdown at a time, so no figure describes a narrow group of visitors. This is what happens to each piece of data it touches.
| Data | What happens to it |
|---|---|
| IP address | Used to find the country and region, then discarded. It never reaches the counts, not even as a hash. |
| Browser user agent | Reduced to a device type, such as phone, tablet or computer, and a browser family, then discarded. It never reaches the counts, not even as a hash. |
| Page address and referrer | Never sent. The request for each page load leaves both out. |
| Cookies | The request for each page load carries none, and the script that sends it reads and writes none. |
| Visitor identifier | None. No identifier of any kind reaches a count. |
| Visitors who object | Not counted. A visitor can opt out with a link you add to your privacy notice, and a browser that sends Global Privacy Control or Do Not Track is not counted either, except in opt-out regions such as US states. There visitors are counted as usual, and a page load on which your banner applied the signal is counted as an automatic opt-out. |
| The consent record | Unchanged. Where a choice was made and with which button are counted, not added to the record. |
| The daily totals | Kept for the site's consent retention period, then deleted with the consent records. On a very busy site Kukie.io may count a share of page loads and weight the totals to match. |
Under the GDPR, where you rely on consent you have to be able to demonstrate it1. The request often comes first from a customer, a client's legal team or a buyer doing due diligence, not from a regulator.
Your current banner proves nothing about what somebody was shown last March, and there is no way to build the records after the fact.
The Consent Log filters by date range, by the type of decision and by country, so a question about one period or one market becomes a short list. Records are listed newest first, one row per decision.
Each row carries the time, the decision, the categories that were allowed, the country, the page it happened on and its consent ID. Everything in it is there because somebody might one day have to justify it.
The consent ID belongs to that one decision and can be looked up later to confirm it exists and what it says. That makes a single record checkable, not a line typed into a spreadsheet.
Organisation owners and admins can export whatever the filters show as a CSV file, the format anyone asking for evidence expects. No screenshots of a dashboard, no copying rows by hand.
A record shows what was chosen. Whether that consent was validly obtained depends on how your banner is set up, and most of that is decided in the banner itself.
Learn more about the consent banner
When a visitor asks to see or delete their data, the consent ID they give you finds every record of their browser, ready to export or delete, and a request form brings those questions into one inbox.
The record
One row is written each time a visitor answers the banner. Every field in the table is stored for every decision, refusals included.
The CSV export carries all of them except the visitor identifier, the user agent hash and the Consent Mode state.
| In the record | What it holds | Why it is there |
|---|---|---|
| Time | The date and time the decision was made | Shows that consent existed before the cookies that depend on it were set |
| Consent ID | A unique identifier for that one decision | Lets a single record be looked up and confirmed later, on its own |
| Decision | Accept all, reject all, a custom selection, an update to an earlier choice, implied consent, an opt-out, or one category accepted outside the banner (from an embed placeholder's Accept button, for example) | The answer itself, in the form it was given, including the region-specific ones and grants made from the page |
| Categories allowed | The list of consent categories the visitor allowed | Shows what was agreed to and, by omission, what was refused |
| Banner version | The version of your banner configuration that was live at that moment | Ties the decision to the wording and controls the visitor saw, not to today's banner |
| Country | The 2-letter country code the visit resolved to | Shows which regional consent rules applied to that visitor |
| Page | The page the decision was made on | Locates the visit and shows where on your site people are asked |
| Visitor identifier | A random identifier generated in the visitor's browser | Connects a later change of mind to the same visitor's earlier answer |
| IP address and user agent | A keyed hash of each, never the raw value | Supports the record without storing the raw IP address or user agent |
| Consent Mode state | Where supplied, the Google Consent Mode state the choice produced | Shows what Google's tags were told for that decision |
Data minimisation
Proof of consent is only useful if it is specific. The obvious way to make it specific is to store more about the visitor, which leaves you holding a searchable file of who visited what and when.
Kukie.io stores a keyed, one-way hash of the IP address and the user agent instead of the values themselves. A hash cannot be read back into an address, so the record still supports a decision without carrying the identifiable part of it. Where the data is stored is on the security page.
What remains is enough to show that a decision was made, and not enough to build a profile of the person who made it.
Records are evidence, but they are also personal data, so keeping them forever is not the cautious option it looks like. You set the retention window for each site, up to your plan's maximum, and older records are cleared automatically once they pass it. The pricing page lists the window on each plan.
When it matters most
Every site that relies on consent should keep them. These are the situations where you are most likely to need them soon.
Supplier questionnaires and procurement reviews ask how consent is recorded, and the answer has to be more than a description of your banner. A dated export answers it in one reply.
Consent records show an agency's clients that what it installed is working, month after month, without asking them to take it on trust. They also show who was responsible for what, and when.
When analytics drops sharply after a banner goes live, the useful question is what share of visitors allow the analytics category. The category breakdown answers it directly.
A sale, a handover or a new person in the role. Stored records let the next owner answer questions about a period they were not there for.
Consent logging is on by default, and you can turn it off for a site in Site Settings if you would rather not keep records. The categories visitors choose between come from your cookie scan, so a record is only as meaningful as the categories behind it.
The dashboard and the records fill from the first visitor who answers your banner. How long records are kept depends on your plan.
Consent records come from the banner and are protected by the platform underneath it. These are the pieces closest to them.
Layouts, categories and consent
Find the cookies your site sets
EU storage, hashing, 2FA
How to read acceptance rates, what happens to your analytics after a banner goes live and what an investigation looks like.
Kukie.io provides tools to collect and record consent. It is not legal advice, and using it does not by itself make a website compliant with any law.