Ship your app, earn from every screen it reaches
The Trillboards CTV Measurement SDK works on Android, ATSC 3.0, HbbTV, Samsung Tizen, LG webOS, and Vizio SmartCast. Two runtimes, one wire format, one self-serve tb_ctv_* API key. From npm install to verified heartbeat in five minutes.
Four steps
1. Get a tb_ctv_* key
Self-serve at /partners/get-started. No email round-trip, no sales call. The key is shown once β store it in your secret manager.
2. Install the SDK
npm install @trillboards/ctv-measurement for CTV web / smart TVs / broadcast runtimes / React Native, or add the Gradle/JitPack coordinate for Android native apps.
3. Call setConsentStatus(true)
Both SDKs are inert until consent is granted. GDPR / CCPA compliant by default; revoke with setConsentStatus(false) at any time.
4. Ship heartbeats
await sdk.measure() (npm) or startScheduledScans() (Android) POSTs the measurement payload to /v1/partner/device/{deviceId}/heartbeat every 30 s.
Every CTV runtime that matters
One wire format, eight supported runtimes. Feature-probed at boot; unsupported runtimes degrade gracefully.
| Runtime | SDK | Coordinate | Notes |
|---|---|---|---|
| Android TV / Fire TV native | Gradle / JitPack | com.github.trillboards.packages:ctv-measurement:0.2.1 | Built on agent-core-lite, the same proximity stack the Trillboards in-house fleet runs in production (~658K signal observations per day). |
| ATSC 3.0 Broadcaster Application | npm | @trillboards/ctv-measurement | A/344 localhost: WebSocket adapter pulls service.id, broadcaster.id, channel.ccid, current.programme.id. |
| HbbTV 2.0+ receiver | npm | @trillboards/ctv-measurement | oipfObjectFactory adapter pulls currentChannel.ccid, onid, tsid, sid, programmes[] (EIT). |
| Samsung Tizen TV web app | npm | @trillboards/ctv-measurement | Fingerprint + viewability + connection. Broadcast metadata only inside privileged OEM apps. |
| LG webOS TV web app | npm | @trillboards/ctv-measurement | Fingerprint + viewability + connection. Broadcast metadata only inside privileged OEM apps. |
| Vizio SmartCast web app | npm | @trillboards/ctv-measurement | Fingerprint + viewability + connection (no broadcast metadata from JS surface). |
| Fire TV / Google TV WebView | npm | @trillboards/ctv-measurement | Bridge to the Android native AAR via window.TrillboardsMeasurement.getSnapshot() for full proximity signals. |
| React Native (Android / iOS) | npm | @trillboards/ctv-measurement | Fingerprint + viewability + connection. The npm SDK runs in any JS environment. |
Privacy-first by design
- Consent gate. No network traffic, no scanning, no fingerprinting until
setConsentStatus(true). Revoke any time. - No PII collection. BLE scanning counts nearby devices; hashed MACs are dropped server-side after k-anon-5 aggregation.
- No camera, no microphone, no audio in the public CTV measurement SDK. The Trillboards in-house fleet SDK (agent-core, GitHub Packages) is a separate package with its own consent contract.
- K-anon-5 enforced server-side on aggregate exports. Geohash Γ hour Γ venue-type buckets require β₯ 5 distinct devices.
Why ship on Trillboards?
- Self-serve
tb_ctv_*key in under a minute β no email, no sales call. - JitPack-fetched Android AAR. No Sonatype, no Personal Access Token, no GitHub Packages credential dance.
- One canonical heartbeat endpoint serves every runtime. Same wire format, same schema, same audit trail.
- Built on the same proximity stack the Trillboards in-house tablet fleet runs in production.
- Manage, rotate, and revoke keys from your earner portal under Developer β API Keys.
Need a deeper integration than the public SDK covers? Reach the team at /support/contact.
Get your tb_ctv_* key