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
| Field | Required | Description |
|---|---|---|
| Write Key | Yes | Your 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
- In the Signal management UI, open Integrations and add June.
- Paste your Write Key.
- Choose the B2B / SaaS preset (or start from it and adjust event mappings to match your product’s events).
- Attach the integration to the pipeline that should forward to June.
- Save. New events flowing through that pipeline now deliver to June.
API Endpoint
| Call type | Endpoint |
|---|---|
| Events | POST https://api.june.so/sdk/track |
| Page views | POST https://api.june.so/sdk/page |
| User traits | POST 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_idtrait), 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 event | June call |
|---|---|
page | page |
Identified | identify |
Signed Up | Signed Up |
Logged In | Logged In |
Feature Used | Feature Used |
Plan Viewed | Plan Viewed |
Trial Started | Trial Started |
Subscription Started | Subscription Started |
Subscription Cancelled | Subscription Cancelled |
Lead Generated | Lead 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
- Trigger an event on your site (or use Signal’s event debugger to replay one).
- Confirm Signal logs a
200response with{"status":200,"success":true}from June. - 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
| Symptom | Likely cause | Fix |
|---|---|---|
401 / 403 from June | Wrong or missing Write Key | Re-copy the Write Key from June workspace settings; ensure no leading/trailing spaces. |
400 from June | Neither userId nor anonymousId present | Confirm Datafly.js is setting anonymous_id, or that identified users carry user_id. |
| Events deliver but no user/account in June | No userId / groupId | Send an Identified event with the user’s traits, and map a company_id trait so events roll up to an account. |
| Event missing in June | Event name not in the mapping | Add the Signal event to the integration’s event map; unmapped events are dropped by design. |