Privacy

What we measure, and what never leaves.

We don't show you a cookie banner. We tell you plainly what is collected instead — this page is that disclosure, and it describes what the code does, not what a template says.

The tools

Google Analytics and Vercel Analytics

This site loads Google Analytics 4 (gtag.js, served by Google) and Vercel Analytics and Speed Insights (served by Vercel, our hosting provider). Both run on the public pages and inside the signed-in product.

They answer one question: which pages and features get used, in aggregate. There is no advertising integration — no Google Ads or conversion linking, and no tag manager — and no analytics sink beyond the two named here.

Separately from analytics: if you fill in a contact form on this site, the details you type — your name, email and phone — are sent to our CRM (HubSpot) so we can reply. That is you deliberately getting in touch, not measurement, and it is the only place contact details leave this site.

The payload

What is sent, and what never is

Every value attached to an analytics event is a bounded, low-cardinality label — an enum or a short route name. Where the only available value would identify a customer, the event is sent with no parameters at all.

Sent

What Google and Vercel receive

  • Which page you viewed. Public pages are recorded by their real path; in-app pages are recorded as a route template — /sites/[id], never the identifier itself.
  • For signed-in users, two coarse enums: your organization's subscription tier (starter, professional, or enterprise) and your role in it (grower, PCA, distributor, water district, or admin).
  • A short list of product events carrying fixed labels — which briefing segment a form was submitted under, which resource was downloaded, which onboarding tour was started or dismissed.
  • Campaign attribution from the link you arrived on (utm_*, gclid). Every other query parameter is discarded before the pageview is sent.
  • The standard device, browser, and approximate-location data Google collects for any site running Analytics — device type, browser, operating system, referring site, and coarse location derived from your IP address.
Never sent

What analytics never receives

  • Your name or email address.
  • Your organization's name or identifier — the tier and role above are deliberately the only account attributes that leave.
  • Your user identifier.
  • Farm, site, or field names, and the identifier of any record you open.
  • Any measurement: water, soil, tissue, or sap results — pH, EC, ppm, gallons, rates, recommendations. None of it is attached to an analytics event.
  • Anything you type: form fields, feedback messages, notes.
In-app pages

URLs are normalized before they're sent

Inside the product the address bar carries record identifiers — a site, a reading, a trial, an invitation. Before a pageview leaves your browser the path is rewritten to the route template that produced it: /sites/9f2a… becomes /sites/[id], and /invite/<token> becomes /invite/[token]. Google receives the shape of the page, never the record.

The rewrite fails closed: any segment that looks like an identifier is replaced even on routes we haven't catalogued. Public article and resource slugs are the deliberate exception and survive intact — knowing which article was read is the whole point of publishing it.

Google Analytics is configured to send no pageviews of its own; the normalized path is the only one we send it.

Error monitoring

Sentry, with personal data stripped first

When something breaks we report the error to Sentry so we can fix it. Every report passes through a scrubber on the way out: request cookies and authorization headers are deleted; your email address, username, and IP address are removed; and anything in the attached diagnostics whose name looks sensitive — site or field names, measurements and readings, coordinates, addresses, tokens, passwords — is replaced with [redacted]. Within that attached diagnostic data, any value that looks like an email address is redacted too.

An internal user id stays on the error so we can tell one person's crash from another's. It is not a name or an email, and it is not sent to Google or Vercel.

If the scrubber itself fails, the report is cut down to a bare shell — the exception and nothing else — rather than sent unscrubbed.

Your controls

Blockers work, and we don't route around them

If your browser blocks trackers — an ad or content blocker, a privacy-focused browser, or a Do Not Track setting that blocks these scripts — the Google and Vercel tags never load and nothing is transmitted. The code treats that as a normal state rather than a failure: measurements are handed to a tag that isn't there and go nowhere. There is no fallback path, no server-side tagging, and no attempt to measure you another way.

Google describes what it does with data from sites that use its products on its own page: How Google uses information from sites or apps that use our services.

Questions about anything on this page go to info@flowritecapital.com.