GrowingHQ

Privacy and analytics

What GrowingHQ measures, what it refuses to measure, and why.

Current state of this build

Google Analytics is configured as a destination. Nothing is loaded and nothing is sent until you agree: decline, and the Google tag is never requested at all. If you agree, only the events listed below are sent, and only the fields shown. GrowingHQ loads no external font and no remote image, and the analytics tag is the only third-party script it will ever load.

Your choice

Analytics is currently not yet chosen.

Turning it off stops further events immediately and tells Google to deny analytics storage. A tag already loaded in this tab cannot be unloaded until you reload the page.

Cookies

GrowingHQ itself sets no cookies. There are no accounts, no sessions and no personalisation, so there is nothing for one to hold. Your consent decision is kept in your browser’s local storage rather than in a cookie, and it never leaves your device.

If you agree to analytics, Google Analytics sets its own cookies to tell one visit from another. Declining means they are never set, because the tag is never loaded. Turning analytics off later stops further events and tells Google to deny analytics storage.

What would be measured, with consent

The complete list. Every event exists to answer a question that would change an editorial decision — an event that cannot state one does not belong in the catalogue.

EventThe question it answersWhat it carries
page_viewedWhich parts of the catalogue are read, and are the indexable ones the read ones?pageFamily, indexable, entityId
entity_viewedWhich plants and problems attract the most interest, and which are never opened?entityId, kind
internal_searchDoes search resolve what people ask it?resultBand, resultCount, queryLength
search_returned_nothingWhat is GrowingHQ being asked for that it cannot answer at all?queryLength, wordCount
grow_query_runIs the What Can I Grow engine answering usefully, and how often does it have to admit the data is thin?criteriaCount, resultBand, rejectedCount, weakDataShown
grow_query_emptyWhich conditions can GrowingHQ not yet suggest anything for?criteriaCount, narrowestCriterion
system_filteredWhich growing methods do readers actually filter by? This is what should decide which systems get populated next.methodSlug, resultBand
evidence_openedDoes anybody open the evidence? The transparency argument depends on the answer.disclosure, pageFamily
source_openedWhich authorities do readers go and check for themselves?sourceSlug, pageFamily
share_performedWhich pages are worth passing on? Nothing about who they were passed to.method, pageFamily
diagnosis_startedWhich symptoms bring people to the diagnostic tool at all?symptomId, hasPlant
diagnosis_completedDoes the tool reach a usable answer, and when it declines, which symptom and how much was described?symptomId, outcome, observationsGiven, candidates
selector_dimension_usedWhich What Can I Grow filters do people actually use? A dimension nobody touches should be reconsidered rather than kept for completeness.dimension
selector_result_openedDo people open results from the top of the list, or scroll past the ranking? A low position bias suggests the ranking is not helping.entityId, position
consent_grantedIs the banner or the settings page where people actually decide?surface, policyVersion

No event can carry free text, and none can be made to. Every field is an enum, a bounded integer, a boolean or a catalogue slug — those are the only field kinds the schema offers, so what you type into the search box has nowhere to go.

Considered and deliberately not implemented

Kept in the source code as well as on this page, so that the next person who thinks “we should track scroll depth” finds the reason before they write it.

Not collectedWhy not
search_query_textA raw gardening search can contain a location, a plot number, a neighbour or a photograph description. There is no field shaped to hold one and there will not be. Length band and word count answer the same editorial question.
grow_query_valuesThe reader's own conditions — their light, their soil, their container size — describe their home. GrowingHQ needs to know WHICH criterion is failing, not what they typed into it.
scroll_depthWould not change an editorial decision. Reading position is not comprehension, and plant profiles are deliberately long reference documents read by jumping to a section.
time_on_pageRewards the wrong outcome. A reader who identifies blossom end rot in nine seconds is the success case, not the failure case.
postcode_or_region_enteredRegion selection is genuinely useful to the product and genuinely identifying at fine resolution. Until there is a coarse enough banding to be safe, it is not collected.
consent_deniedCannot be transmitted by a system that respects the refusal it describes. The denominator comes from page_viewed instead.
user_idGrowingHQ has no accounts and will not recognise a returning reader.

Commercial content

GrowingHQ carries no advertising and embeds no ad network. When commercial content is introduced it will come through the HEKNO platform rather than a direct network relationship, and the placement policy is already written into the code: no commercial content on any page carrying a critical safety warning, and none at all on 10 page families including every diagnostic page and every page about how GrowingHQ works.

The reason for the diagnostic exclusion is specific. A product placement beside a list of possible causes turns a diagnostic tool into a sales funnel, and a reader can no longer tell which of the two they are reading.