Transparency

Every event we record.

Sahnga runs first-party product analytics on our own BigQuery warehouse — no PostHog, no third-party trackers, and no analytics code running in your browser on the marketing pages you’re reading right now. On these pages we count visits on our own server — which page, which site linked here, whether you're on a phone or a laptop, which country, and whether you look like a person or a robot. No cookies, no scripts, and nothing that could tell us it was you. This page lists that count in full, and every event the product app can emit (schema v1).

Event properties only ever contain ids — user ids, workspace ids, task ids. Emails, names, and free text are rejected before an event is even sent (enforced in code, not just policy).

This page

8

On these pages we count visits on our own server — which page, which site linked here, whether you're on a phone or a laptop, which country, and whether you look like a person or a robot. No cookies, no scripts, and nothing that could tell us it was you. The counting happens on our server while it answers the request, so there is no analytics code in these pages at all — nothing to load, nothing to block, nothing to consent to. One visit writes one row, and the whole row is this:

  • path

    Which marketing page was asked for, matched against a fixed list of our own routes. Anything not on that list — a scanner probing for /wp-admin, a stale link — is stored as the single value /__other. Query strings are dropped before the row is built.

  • referrer_host

    The host of the site that linked here, and only the host: news.ycombinator.com, not the full address. Search terms live in the query string of a referring URL, so the query string never arrives.

  • device

    One of four words: mobile, tablet, desktop, unknown. Worked out from the request and then the input is thrown away.

  • is_bot

    Whether the request looked like a crawler or a script rather than a person, so charts can exclude it.

  • country

    A two-letter country code, and only when the platform serving the page has already resolved one. We never look at the address it came from. Often empty.

  • ts

    When the page was requested. The table is partitioned by this date and rows are deleted automatically after 400 days.

  • event_id

    A random number for this row, used once to discard duplicates if a row is delivered twice. It is not linked to you or to any other row.

  • schema_version / env

    Which version of this table's shape the row was written against, and whether it came from production or a developer's laptop.

And here is the more important list — the columns this table does not have. There is no version of it that can be joined back to a person, because the fields you would need to do that were never collected:

  • ip

    Your address arrives with the request, the way it does with every web request ever made, and is used to send the page back. It is never written down here — not stored, not hashed, not bucketed.

  • user_agent

    The raw browser string is read once to answer phone-or-laptop and person-or-robot, then dropped. It is a fingerprint, so it is never stored.

  • cookie

    Nothing is set and nothing is read. There is no cookie banner on this site because there is nothing to ask you about.

  • session_id / visitor_id

    There is no way to tell whether two rows are the same person, which is why we can tell you how many pages were read and can never tell you how many people read them.

  • fingerprint

    No canvas, no fonts, no screen size, no timing — no client-side code of any kind runs on these pages, so there is nothing to fingerprint with.

Account

4
  • auth_sign_up

    A new account was created (email or Google).

  • auth_sign_in

    An existing account signed in.

  • auth_sign_out

    A session ended (user-initiated sign-out).

  • auth_email_verified

    An account confirmed its email address.

Workspace

6
  • ws_created

    A workspace was created.

  • ws_switched

    The active workspace changed for a session.

  • ws_invite_sent

    A member or guest invite was sent.

  • ws_invite_accepted

    An invite was accepted, joining a workspace.

  • ws_member_role_changed

    A member's role or status changed.

  • ws_theme_changed

    A workspace's appearance theme was changed.

Tasks

12
  • task_created

    A task was created.

  • task_updated

    A task's fields were edited.

  • task_completed

    A task's status moved to done.

  • task_deleted

    A task was soft-deleted.

  • task_subtask_created

    A subtask was added under a parent task.

  • task_dependency_added

    A task was marked as depending on another task.

  • task_label_applied

    A label was assigned to a task.

  • task_watcher_toggled

    A task's watch state was toggled for a member.

  • task_multi_assignee_set

    A task's assignees were changed via the assignee picker.

  • task_date_set

    A task's start or due date was set.

  • task_filter_applied

    A list-view filter was applied to a project's tasks.

  • task_shared_to_chat

    A task was shared into a chat channel.

Attachments

2
  • attachment_added

    A file was attached to a task or a chat message.

  • attachment_scan_completed

    An uploaded file finished malware scanning — the verdict, the surface it was uploaded to, a size bucket and how long the scan took. Never the filename, and never the engine's signature name.

Roadmap

7
  • roadmap_goal_created

    A roadmap goal was created.

  • roadmap_goal_edited

    A roadmap goal's title, colour or dates were changed (which fields, never their values).

  • roadmap_goal_linked

    A task was linked to a roadmap goal.

  • roadmap_goal_status_changed

    A roadmap goal's status changed.

  • roadmap_gantt_rescheduled

    A task's dates were changed from the Gantt view.

  • roadmap_share_enabled

    A public roadmap share link was turned on.

  • roadmap_share_revoked

    A public roadmap share link was revoked.

Projects

5
  • project_created

    A project was created.

  • project_archived

    A project was archived.

  • project_view_opened

    A project view (list/board/calendar/roadmap/gantt) was opened.

  • project_guest_invited

    A guest was invited to a project.

  • project_share_opened

    The project share/guests dialog was opened.

My Tasks

1
  • my_tasks_opened

    The My Tasks page was viewed, by tab.

Command palette

1
  • command_palette_used

    A command was run from the command palette.

Keyboard shortcuts

1
  • shortcut_used

    A keyboard shortcut was used.

Collaboration

2
  • collab_comment_created

    A comment was posted on a task.

  • collab_mention

    A comment mentioned a teammate.

Billing

5
  • billing_checkout_started

    A band checkout session was started.

  • billing_checkout_completed

    A Stripe checkout completed and a band activated.

  • billing_portal_opened

    The Stripe customer portal was opened.

  • billing_band_changed

    A workspace's band changed (upgrade/downgrade).

  • billing_auto_downshift_kept

    An owner canceled a scheduled auto-downshift (M4-07) to keep their current band.

Import

2
  • import_started

    A Trello import job started.

  • import_completed

    A Trello import job finished.

Export

2
  • export_started

    A workspace export job started.

  • export_completed

    A workspace export job finished.

App

1
  • app_opened

    The app shell loaded for a session.

Onboarding

1
  • onboarding_step

    An onboarding checklist step was reached.

Account deletion

2
  • account_deletion_requested

    A user requested account deletion.

  • account_deletion_canceled

    A user canceled a pending deletion request.

Abuse reports

1
  • abuse_report_submitted

    A user submitted an abuse report.

Chat

7
  • chat_channel_created

    A chat channel was created.

  • chat_message_sent

    A message was sent in a channel or DM.

  • chat_dm_started

    A 1:1 direct message conversation was started.

  • chat_reaction_added

    An emoji reaction was added to a message.

  • chat_thread_replied

    A threaded reply was posted.

  • chat_notify_changed

    A channel's notification preference was changed.

  • chat_sound_toggled

    Chat notification sounds were turned on or off.

Calls

2
  • call_joined

    A voice call was joined.

  • call_left

    A voice call was left.

Forms

4
  • form_created

    An intake form was created for a project.

  • form_enabled_changed

    An intake form was turned on or off.

  • form_token_regenerated

    An intake form's public link was regenerated.

  • form_submitted

    A public intake form received a submission.

Reminders

2
  • reminder_set

    A personal reminder was set on a task.

  • reminder_cleared

    A personal reminder was cleared.

Countdowns

1
  • countdown_created

    A countdown was added to a project overview.

template

1
  • template_applied

    A task template was applied to create a task.

Questions about a specific event or want your data deleted? See our privacy policy or the promises.