Skip to main content

Knowledge > Products > WiseAI Realtor > Compliance, Privacy & Analytics

WiseAI Realtor — Analytics, Consent, Anti-Bot & Per-Client Legal

Every public REALTOR site we host needs this layer, configured per client (each is its own brokerage, province, policy set, and ad-tag set). These four areas interlock: consent gates analytics/marketing tags; legal pages live in the footer; anti-bot guards the lead forms. Requirements + recommendation only — actual legal text needs counsel/brokerage sign-off.

Default = first-party, server-side, privacy-preserving (our moat + needs no consent banner):

  • Events: page views, listing views, search queries, QR-sign scans, lead-form submissions, chat starts, voice-call starts, showing-booked — all tied to the lead/contact timeline and the dashboard's source attribution.
  • Built on existing infra: /api/analytics/demo-event, lead_events, campaign_members (see do-not-reinvent.md). No cross-site tracking cookies → no banner required for these.

Optional per-client third-party tags (client owns these; they trigger consent):

  • Google Analytics 4 / Google Tag Manager, Meta Pixel, Google Ads conversion, (maybe TikTok/LinkedIn). Configured in Settings → Website/Integrations per client (paste their IDs).
  • These are loaded only after consent (see §2), via Google Consent Mode v2.

Third-party connections to disclose (each is an external request the privacy policy + consent must cover): map tiles (Leaflet/OSM or Google Maps/Places), Google Fonts (self-host to avoid), the AI chat/voice widget, REALTOR.ca/board links, any embedded video, the client's ad pixels. Recommendation: self-host fonts, prefer privacy-light defaults, and keep a per-client "data recipients" list that auto-populates the privacy policy.

Canada context: PIPEDA (meaningful consent for personal-info collection) + Quebec Law 25 (strictest — consent + easy withdrawal for tracking/profiling, privacy-by-default; French required) + GDPR/ePrivacy if any EU visitors. Ontario adds AODA (accessible banner).

Recommendation — build a lightweight first-party CMP (we control the stack; avoids per-client Cookiebot/Osano fees):

  • Categories: Essential (always on, first-party analytics + security) / Analytics / Marketing.
  • Privacy-by-default: non-essential OFF until opt-in; reject is as easy as accept; preferences re-openable from a footer "Cookie preferences" link; consent logged + versioned.
  • Gating: third-party tags (§1) do not load until their category is accepted (Consent Mode v2).
  • Smart default: if a client enables NO third-party tags, the site uses first-party-only analytics → show a minimal notice, no blocking banner (less friction, still compliant).
  • Per-client: branding (logo/colors), province rules (Quebec Law 25 → French + stricter; auto-detect), link to that client's policy.
  • Open decision: build vs buy a CMP. Recommend build for control + cost; revisit if multi-jurisdiction complexity grows.

3. Anti-bot (protect lead forms without killing conversion)

Guards: contact, home-value, intake, QR-scan capture, newsletter, chat. Conversion is sacred — never block a real lead (false positives = lost customers).

Recommendation — layered, low-friction (no visible CAPTCHA):

  1. Honeypot field + form-fill timing + per-IP/route rate-limit + server-side heuristics (existing bot-detection.ts; intake already has a BotID soft-gate — see FEATURE_REGISTRY).
  2. Escalate only suspicious traffic to Cloudflare Turnstile (invisible, privacy-first, free, no consent cookie).
  3. Avoid Google reCAPTCHA (privacy/cookie-consent burden) and any CAPTCHA that demands solving (accessibility + UX harm).
  • Log bot decisions; alert if false-positive rate rises. Tune false-negative-tolerant.

Each client site footer must carry, and link to, client-specific pages:

  • Privacy Policy (PIPEDA; + Quebec Law 25 clauses + French if QC) — generated from client details + the §1 data-recipients list.
  • Terms of Use.
  • Accessibility statement (AODA for Ontario businesses).
  • Cookie / consent preferences (re-opens the CMP, §2).
  • Required real-estate disclosures: MLS®/REALTOR® trademark attribution ("owned by CREA"), DDF® attribution, listing "courtesy of" brokerage on IDX listings, brokerage identification (legal brokerage name + "Brokerage" + address — RECO advertising rule in Ontario), fair-housing/Human-Rights compliance.

Recommendation — templated, province-aware, shared-base + merge-fields:

  • We maintain one base set; each client's pages render from their brokerage/jurisdiction/contact/data-practices. Law changes → update the base once, all clients inherit. Version + timestamp each policy (ties to consent records).
  • Province logic: QC → French + Law 25; ON → AODA + RECO; others → PIPEDA baseline.
  • Routes already exist: src/app/s/[slug]/privacy + /terms (make per-client + compliant); add /accessibility + cookie-prefs.

Where this is configured (UX)

This lives primarily under the WEBSITE pillar — not scattered across the backend. A "Website → Tracking & Compliance" sub-section holds: third-party tag IDs (GA4/Meta/Ads), the consent-banner config (categories, province rules, branding), the legal-page generator (Privacy/Terms/Accessibility), and the data-recipients list. It renders on the public site as the consent banner + footer.

Two cross-cutting carve-outs:

  1. Anti-bot belongs to any lead-capture surface, not just the hosted site — it also guards the AI chat embed and QR/landing pages we host for bring-your-own-website clients (who have no hosted site from us). So it's a "lead-capture" guard that spans hosted + BYO.
  2. Brokerage legal identity (legal name, address, RECO #) lives in Business Profile, because it's reused by email + voice disclosures too — the Website footer just renders it.

For bring-your-own-website clients: the consent banner/footer/legal on their own site is their existing vendor's responsibility; our scope is the chat embed + any landing/QR pages we host (which still need anti-bot + a privacy link).

Existing vs new

AreaStatusWhere
First-party event analytics + attributionHave/api/analytics/demo-event, lead_events, campaign_members
Anti-bot heuristics + intake BotID soft-gatePartial (Have)bot-detection.ts, intake route
Privacy / Terms routesHave (stub)src/app/s/[slug]/{privacy,terms} — need per-client + compliant
Cookie consent CMP (categories + gating + Consent Mode)Greenfieldnew
Per-client legal generation (province-aware) + Accessibility pageGreenfieldnew
Third-party tag manager (GA4/Meta/Ads, consent-gated)Greenfieldnew (Settings)
Cloudflare Turnstile escalationGreenfieldnew

Open decisions / flags

  1. CMP build vs buy (recommend build).
  2. Anti-bot: Turnstile vs honeypot-only baseline (recommend honeypot + Turnstile-on-suspicion).
  3. Maps/fonts provider (privacy-light default; self-host fonts).
  4. Legal review required before any client goes live — privacy/Terms/Law 25/RECO wording is counsel/brokerage's call, not ours.