What Heap traffic looks like
Heap's autocapture model means most of its traffic is machine-generated interaction events, batched and flushed, rather than hand-instrumented calls.
- Endpoint pattern
- SDK from
cdn.heapanalytics.com; data toheapanalytics.com,c.us.heap-api.com, orc.eu.heap-api.comfor EU-pinned accounts. Newerrm-api.comendpoints appear following Heap's merge into Contentsquare. The path describes the call:/trackevents,/identifyuser identity,/add_user_propertiesprofile updates - Transport
- POST with a JSON body; autocapture flushes clicks, form submissions, and page views in groups via a batched
eventsarray - Key parameters
app_idenvironment ID: Heap setups usually have separate dev and prod IDs, so it is the first sanity check · per event: the event name (custom fromheap.track(), autocaptured interactions otherwise) ·propertiesobject ·identitywhen the user is identified · timestamp ·session_idand library/SDK version fields alongside
A typical autocapture batch, as Event Watcher captures it:
{
"app_id": "1234567890",
"events": [
{
"event": "click",
"properties": { "target_text": "Add to cart", "path": "/produkter/sko" },
"session_id": "17546400…",
"identity": "user@example.dk"
}
]
}
Debugging Heap with Event Watcher
- Matches all the Heap endpoints, including the regional
heap-api.comcollectors and therm-api.comhosts. - The parser classifies each request by endpoint type (Track, Identify, User Properties, Bulk Track) and unpacks batched
eventsarrays into individual entries. - Payloads split into event properties, user properties, and an identity group (
app_id, user and session IDs, SDK version). - Autocapture generates volume you didn't instrument, so the Grouped view pivoted by Event Name is the fastest way to see what Heap actually records on a page, and the Script Tree view confirms which script loaded the SDK.
Heap and consent
Analytics consentThe extension checks Heap against the analytics consent category. Autocapture makes Heap's consent posture unusually binary: the moment the SDK initializes, it starts capturing clicks and page views. There is no degraded or cookieless ping mode.
An ungated snippet means the first /track batch typically leaves while the banner is still open, marked pre-consent and counted as violations.
Gating Heap correctly means deferring heap.load() itself, not just custom heap.track() calls, and the stream shows directly whether that is the case.
Common debugging scenarios
- Dev events polluting production. Read
app_idon the parsed hits. A staging environment ID shipping on the live site is the most common Heap misconfiguration. - Users never identified. Trigger login and check for an
/identifyrequest with the expected identity value, then confirm later/trackevents carry it. - "Are these clicks even captured?" Click the element and watch the stream. The parsed batch shows the autocaptured event and its properties without waiting on Heap's UI.
- Consent audit. Load the page fresh, leave the banner unanswered, and check whether Heap batches appear with the pre-consent badge.
- Double SDK load after a tag migration. The Script Tree view shows whether both GTM and a hardcoded snippet load
heap-scripts.