00:00 — REC
See why users get stuck — without reproducing the bug.
logcohort records real sessions on your site and plays them back like video — with the console errors and failed requests on the same timeline as the clicks. Filter to the sessions where someone actually struggled, deep-link the exact second, send it to an engineer.
<script> — 8 lines, installs without an engineering ticket · inputs masked by default · free plan, no credit card
00:03 — REPLAY · LIVE
Iframes
Watched in logcohort itself: a page that embeds iframes every way there is — same-origin, srcdoc, sandboxed all record and replay, inputs masked even inside the frame. Third-party frames can't be read by any tool; we show a labeled placeholder, never a broken blank.
not a video — an actual recording, replayed by the same engine the app uses
00:07 — FRUSTRATION
Find the sessions worth watching
Nobody has time to watch recordings all day. logcohort flags rage clicks, dead clicks, error clicks, and abandoned forms — filter to the sessions where someone actually struggled, on the page you're redesigning this sprint.
00:11 — JOURNEY
Follow one person across every product
The visitor on your marketing site and the user in your app are the same person. logcohort joins their sessions across your subdomains with a first-party cookie — and across separate domains whenever both sides identify the same login. Their journey reads as a story — arrived from where, which pages, where they struggled, where they left — and every step opens the replay at that exact second.
00:15 — HANDOFF
Your engineers won't ask you to reproduce it
Every replay carries the console and the network log on the same timeline. When friction turns out to be a bug, deep-link the exact second and send it — the stack trace and the failed request are already in the link.
00:23 — INSTALL
This is the whole install
Paste it before </head> — or drop it in Google Tag Manager yourself, no deploy needed. Recording starts with the next visit. Masking is on by default for every input field.
<script>
window.logcohort||(function(d){
var o=window.logcohort=function(){o.api.push(arguments)};o.api=[];
var c=d.createElement('script');c.async=true;
c.src='https://app.logcohort.com/recorder.js';
d.getElementsByTagName('head')[0].appendChild(c);
})(document);
logcohort('init','lc_YOUR_PROJECT_KEY');
</script>00:28 — PRIVACY
Masked before it leaves their browser
Every input is masked by default — values are replaced with **** inside the visitor's browser, before anything is sent. Network capture is metadata only: method, URL, status, duration. Never request or response bodies, never what someone typed — you can't even search recordings by typed text, only by errors, pages, and clicked elements. Anything else — displayed emails, whole page regions — can be masked with a class or a dashboard selector: Privacy & masking.
00:32 — END OF PREVIEW