June

June is product analytics for B2B SaaS — it turns your event stream into ready-made account and user reports. Datafly Signal delivers events to June server-side, so your page views, lifecycle events, and identified users reach June without a browser-side June snippet and survive ad blockers and ITP cookie limits.

Signal posts to June’s Segment-compatible HTTP API (/sdk/track, /sdk/page), authenticating with your workspace Write Key.

Prerequisites

  • A June workspace (app.june.so).
  • Your June Write Key, from the workspace settings page.
  • A Datafly Signal pipeline already collecting events from your site with Datafly.js.

Configuration

FieldRequiredDescription
Write KeyYesYour June workspace Write Key. Signal sends it as the HTTP Basic credential (Authorization: Basic <write_key>). Paste the exact value June shows in workspace settings.

Configure in Signal

  1. In the Signal management UI, open Integrations and add June.
  2. Paste your Write Key.
  3. Choose the B2B / SaaS preset (or start from it and adjust event mappings to match your product’s events).
  4. Attach the integration to the pipeline that should forward to June.
  5. Save. New events flowing through that pipeline now deliver to June.

API Endpoint

Call typeEndpoint
EventsPOST https://api.june.so/sdk/track
Page viewsPOST https://api.june.so/sdk/page
User traitsPOST https://api.june.so/sdk/identify

Authentication is HTTP Basic using your Write Key. A successful request returns { "status": 200, "success": true }.

Identity Signals

June ties events to people and accounts using:

  • userId — your stable internal user identifier, mapped from Signal’s user_id.
  • anonymousId — Signal’s first-party anonymous_id, sent on every call so pre-login activity is captured and later stitched to the user when they identify.
  • context.groupId — the account/company identifier (mapped from a company_id trait), so June can roll events up into account reports.

At least one of userId or anonymousId is present on every call. Identify calls carry email, name, firstName, and lastName traits.

Event Mapping

Signal uses GA4-style event names. The B2B / SaaS preset maps them to June events:

Signal eventJune call
pagepage
Identifiedidentify
Signed UpSigned Up
Logged InLogged In
Feature UsedFeature Used
Plan ViewedPlan Viewed
Trial StartedTrial Started
Subscription StartedSubscription Started
Subscription CancelledSubscription Cancelled
Lead GeneratedLead Generated

Events not in the mapping are dropped (the preset uses drop as its default action), so June only receives the events you intend.

Example

A Datafly.js call on your site:

datafly.track("Subscription Started", {
  order_id: "sub_8842",
  revenue: 49.0,
  currency: "USD",
  product_name: "Pro Monthly"
});

Resulting request Signal sends to June:

POST https://api.june.so/sdk/track
Authorization: Basic YOUR_WRITE_KEY
Content-Type: application/json
 
{
  "userId": "user_123",
  "anonymousId": "a1b2c3d4-...",
  "event": "Subscription Started",
  "timestamp": "2026-06-06T10:22:14.000Z",
  "properties": {
    "order_id": "sub_8842",
    "revenue": 49.0,
    "currency": "USD",
    "plan_name": "Pro Monthly"
  },
  "context": {
    "groupId": "acct_55",
    "ip": "203.0.113.10",
    "userAgent": "Mozilla/5.0 ...",
    "locale": "en-US"
  }
}

Testing

  1. Trigger an event on your site (or use Signal’s event debugger to replay one).
  2. Confirm Signal logs a 200 response with {"status":200,"success":true} from June.
  3. In June, open the user or account profile and verify the event appears in the activity timeline. New events typically show within a minute.

Troubleshooting

SymptomLikely causeFix
401 / 403 from JuneWrong or missing Write KeyRe-copy the Write Key from June workspace settings; ensure no leading/trailing spaces.
400 from JuneNeither userId nor anonymousId presentConfirm Datafly.js is setting anonymous_id, or that identified users carry user_id.
Events deliver but no user/account in JuneNo userId / groupIdSend an Identified event with the user’s traits, and map a company_id trait so events roll up to an account.
Event missing in JuneEvent name not in the mappingAdd the Signal event to the integration’s event map; unmapped events are dropped by design.