{"id":13051,"date":"2026-08-28T13:39:14","date_gmt":"2026-08-28T11:39:14","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/toolbox\/conversion-window-audience-duration-calculator\/"},"modified":"2026-08-28T13:39:14","modified_gmt":"2026-08-28T11:39:14","slug":"conversion-window-audience-duration-calculator","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/","title":{"rendered":"Conversion Window and Audience Duration Calculator"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">Three settings decide numbers that look like results. A conversion window decides how many of the sales that happened get counted, not how many happened. A second, shorter window applied to one class of touch removes everything that lands after it. And a membership duration multiplies against the daily inflow, so halving it does not trim a list, it halves it. All three are arithmetic, and all three can be worked out before the setting is changed.<\/p>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin-bottom: 14px;\">\n<div>\n            <label for=\"kf-taeglich\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Eventual conversions per day<\/label><br \/>\n            <input id=\"kf-taeglich\" type=\"number\" min=\"0\" step=\"10\" value=\"500\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-median\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Median lag, days<\/label><br \/>\n            <input id=\"kf-median\" type=\"number\" min=\"0.1\" step=\"0.5\" value=\"7\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-fenstera\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Window A, days<\/label><br \/>\n            <input id=\"kf-fenstera\" type=\"number\" min=\"1\" max=\"540\" step=\"1\" value=\"30\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-fensterb\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Window B, days<\/label><br \/>\n            <input id=\"kf-fensterb\" type=\"number\" min=\"1\" max=\"540\" step=\"1\" value=\"90\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<\/p><\/div>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"kf-verteilung\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Measured lag, one line per day: day, conversions<\/label><br \/>\n        <textarea id=\"kf-verteilung\" rows=\"4\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box; font-family: monospace; font-size: 0.82rem;\"><\/textarea>\n    <\/div>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin-bottom: 14px;\">\n<div>\n            <label for=\"kf-anteilkurz\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Touches on the short window, %<\/label><br \/>\n            <input id=\"kf-anteilkurz\" type=\"number\" min=\"0\" max=\"100\" step=\"1\" value=\"35\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-fensterkurz\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Short window, days<\/label><br \/>\n            <input id=\"kf-fensterkurz\" type=\"number\" min=\"1\" max=\"30\" step=\"1\" value=\"1\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-zulauf\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Daily inflow into the audience<\/label><br \/>\n            <input id=\"kf-zulauf\" type=\"number\" min=\"0\" step=\"100\" value=\"2000\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-dauera\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Membership duration A, days<\/label><br \/>\n            <input id=\"kf-dauera\" type=\"number\" min=\"1\" max=\"10000\" step=\"1\" value=\"60\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"kf-dauerb\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Membership duration B, days<\/label><br \/>\n            <input id=\"kf-dauerb\" type=\"number\" min=\"1\" max=\"10000\" step=\"1\" value=\"540\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<\/p><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">With the lag field empty the calculation uses an exponential model in which exactly half the conversions have arrived by the median day. Paste measured data and the model is not used at all &#8211; day 1 means within the first day after the touch, and a window of n days captures every line up to and including day n.<\/p>\n<p>    <button id=\"kf-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: var(--on-accent, #0b1114); border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Calculate<\/button><\/p>\n<div id=\"kf-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Three settings decide numbers that look like results. A conversion window decides how many of the sales that happened get counted, not how many happened. A second, shorter window applied to one class of touch removes everything that lands after it. And a membership duration multiplies against the daily inflow, so halving it does not trim a list, it halves it. All three are arithmetic, and all three can be worked out before the setting is changed.\",\"label_taeglich\":\"Eventual conversions per day\",\"label_median\":\"Median lag, days\",\"label_verteilung\":\"Measured lag, one line per day: day, conversions\",\"label_fenstera\":\"Window A, days\",\"label_fensterb\":\"Window B, days\",\"label_anteilkurz\":\"Touches on the short window, %\",\"label_fensterkurz\":\"Short window, days\",\"label_zulauf\":\"Daily inflow into the audience\",\"label_dauera\":\"Membership duration A, days\",\"label_dauerb\":\"Membership duration B, days\",\"modell_erklaerung\":\"With the lag field empty the calculation uses an exponential model in which exactly half the conversions have arrived by the median day. Paste measured data and the model is not used at all - day 1 means within the first day after the touch, and a window of n days captures every line up to and including day n.\",\"knopf\":\"Calculate\",\"h_fenster\":\"What the window changes\",\"zeile_quelle\":\"Basis of the calculation\",\"quelle_verteilung\":\"the pasted lag data\",\"quelle_modell\":\"the exponential model\",\"zeile_anteila\":\"Captured by window A\",\"zeile_anteilb\":\"Captured by window B\",\"zeile_gemeldeta\":\"Reported per day, window A\",\"zeile_gemeldetb\":\"Reported per day, window B\",\"zeile_unterschied\":\"Difference\",\"zeile_grenzertrag\":\"What one more day beyond A adds\",\"h_tabelle\":\"Across the usual windows\",\"spalte_fenster\":\"Window\",\"spalte_anteil\":\"Captured\",\"spalte_gemeldet\":\"Reported per day\",\"einheit_tage\":\"days\",\"h_geteilt\":\"One short window for part of the touches\",\"zeile_einheitlich\":\"One window for everything\",\"zeile_gemischt\":\"Split windows\",\"zeile_verlust\":\"Falls out\",\"h_bestand\":\"Audience in steady state\",\"zeile_bestanda\":\"List size at duration A\",\"zeile_bestandb\":\"List size at duration B\",\"zeile_faktor\":\"Ratio\",\"h_hinweise\":\"Notes\",\"hinweis_keine_konversionen\":\"Without a daily conversion figure only the shares are meaningful; the absolute columns stay at zero.\",\"hinweis_verteilung_genutzt\":\"The pasted lag data is being used. The median field is ignored while that data is present.\",\"hinweis_modell_genutzt\":\"No lag data was pasted, so the exponential model with the given median is doing the work.\",\"hinweis_kein_median\":\"Without a median above zero and without pasted data there is nothing to distribute; every share stays at zero.\",\"hinweis_zeilen_verworfen\":\"These lines were not readable as a day and a count and have been left out: {verworfen}\",\"hinweis_fenster_gleich\":\"Both windows are the same length, so the difference is zero by construction.\",\"hinweis_mehr_gezaehlt\":\"The difference is reported conversions, not additional sales. The same purchases were made either way - the window only decides which of them a report is allowed to show.\",\"hinweis_bruch\":\"Changing a window splits the history at the day of the change. Figures before and after are not comparable, no recalculation restores the older side, and a year-over-year comparison crosses the seam without saying so.\",\"hinweis_kurzfenster\":\"The short window applies to part of the touches. Everything that converts after it drops out of every column - not into a separate one, and not into a lower attribution weight.\",\"hinweis_bestand_faktor\":\"In steady state a list is its daily inflow multiplied by its duration, so the ratio of the durations is the ratio of the list sizes: a factor of {faktor} on the same audience.\",\"hinweis_bestand_annahme\":\"The steady-state figure assumes a constant inflow and members leaving exactly at the end of the duration. After a change the real list needs one full duration to settle at the new size.\",\"hinweis_schwanz\":\"The exponential model puts half the conversions inside the median. Measured lag usually carries a heavier tail, so long windows tend to gain somewhat more than shown here.\",\"dezimal\":\".\"};<\/p>\n<p>    var TABELLE = [1, 3, 7, 14, 30, 60, 90];<\/p>\n<p>    function zahl(wert, ersatz) {\n        var n = Number(wert);\n        return isFinite(n) ? n : ersatz;\n    }<\/p>\n<p>    \/**\n     * Liest eine eingefuegte Verzoegerungsverteilung: je Zeile ein Tag und die\n     * Zahl der Konversionen mit dieser Verzoegerung. Tag 1 heisst: innerhalb\n     * des ersten Tages nach der Beruehrung.\n     *\/\n    function verteilungLesen(text) {\n        var punkte = [];\n        var ungueltig = [];\n        var zeilen = String(text == null ? '' : text).split(\/\\r\\n|\\r|\\n\/);\n        zeilen.forEach(function (z) {\n            var roh = z.replace(\/^\\s+|\\s+$\/g, '');\n            if (!roh.length) { return; }\n            var t = roh.split(\/[,;\\t ]+\/);\n            if (t.length < 2) { ungueltig.push(roh); return; }\n            \/\/ Number('') ist 0, nicht NaN: eine Zeile aus lauter Trennzeichen\n            \/\/ waere sonst lautlos zum Datenpunkt (0,0) geworden. Deshalb wird\n            \/\/ die Schreibweise geprueft und nicht bloss das Ergebnis.\n            if (!\/^\\d+(\\.\\d+)?$\/.test(t[0]) || !\/^\\d+(\\.\\d+)?$\/.test(t[1])) { ungueltig.push(roh); return; }\n            var tag = Number(t[0]);\n            var anzahl = Number(t[1]);\n            if (!isFinite(tag) || !isFinite(anzahl) || tag < 0 || anzahl < 0) { ungueltig.push(roh); return; }\n            punkte.push({ tag: tag, anzahl: anzahl });\n        });\n        var gesamt = punkte.reduce(function (s, p) { return s + p.anzahl; }, 0);\n        return { punkte: punkte, gesamt: gesamt, ungueltig: ungueltig, brauchbar: punkte.length > 0 && gesamt > 0 };\n    }<\/p>\n<p>    \/** Anteil der Konversionen, die innerhalb von w Tagen eintreffen. *\/\n    function anteilAus(w, median, verteilung) {\n        var fenster = zahl(w, 0);\n        if (fenster <= 0) { return 0; }\n        if (verteilung &#038;&#038; verteilung.brauchbar) {\n            var drin = 0;\n            verteilung.punkte.forEach(function (p) { if (p.tag <= fenster) { drin += p.anzahl; } });\n            return drin \/ verteilung.gesamt;\n        }\n        var m = zahl(median, 0);\n        if (m <= 0) { return 0; }\n        \/\/ Exponentialmodell: bei w = Median ist genau die Haelfte eingetroffen.\n        return 1 - Math.pow(2, -fenster \/ m);\n    }\n\n    function rechnen(e) {\n        var ein = e || {};\n        var taeglich = Math.max(0, zahl(ein.taeglich, 0));\n        var median = Math.max(0, zahl(ein.median, 0));\n        var verteilung = verteilungLesen(ein.verteilung);\n        var fensterA = Math.max(0, Math.round(zahl(ein.fensterA, 0)));\n        var fensterB = Math.max(0, Math.round(zahl(ein.fensterB, 0)));\n        var fensterKurz = Math.max(0, Math.round(zahl(ein.fensterKurz, 0)));\n        var anteilKurz = Math.min(1, Math.max(0, zahl(ein.anteilKurz, 0) \/ 100));\n        var zulauf = Math.max(0, zahl(ein.zulauf, 0));\n        var dauerA = Math.max(0, Math.round(zahl(ein.dauerA, 0)));\n        var dauerB = Math.max(0, Math.round(zahl(ein.dauerB, 0)));\n\n        function anteil(w) { return anteilAus(w, median, verteilung); }\n\n        \/\/ --- Fenstervergleich ---\n        var aA = anteil(fensterA);\n        var aB = anteil(fensterB);\n        var gemeldetA = taeglich * aA;\n        var gemeldetB = taeglich * aB;\n        var unterschied = gemeldetB - gemeldetA;\n        var relativ = gemeldetA > 0 ? (gemeldetB \/ gemeldetA - 1) : null;<\/p>\n<p>        var tabelle = TABELLE.map(function (w) {\n            var a = anteil(w);\n            return { fenster: w, anteil: a, gemeldet: taeglich * a };\n        });\n        \/\/ Grenzertrag: was der jeweils naechste Tag ueber Fenster A hinaus bringt.\n        var grenzertrag = taeglich * (anteil(fensterA + 1) - aA);<\/p>\n<p>        \/\/ --- Geteilte Fenster: kurzes Fenster fuer einen Teil der Beruehrungen ---\n        var aKurz = anteil(fensterKurz);\n        var gemischt = anteilKurz * aKurz + (1 - anteilKurz) * aA;\n        var einheitlich = aA;\n        var verlustAnteil = einheitlich - gemischt;\n        var verlustAbsolut = taeglich * verlustAnteil;<\/p>\n<p>        \/\/ --- Zielgruppenbestand im eingeschwungenen Zustand ---\n        var bestandA = zulauf * dauerA;\n        var bestandB = zulauf * dauerB;\n        var faktor = dauerA > 0 ? dauerB \/ dauerA : null;<\/p>\n<p>        var hinweise = [];\n        if (taeglich <= 0) { hinweise.push('keine_konversionen'); }\n        if (verteilung.brauchbar) { hinweise.push('verteilung_genutzt'); }\n        else if (median > 0) { hinweise.push('modell_genutzt'); }\n        else { hinweise.push('kein_median'); }\n        if (verteilung.ungueltig.length) { hinweise.push('zeilen_verworfen'); }\n        if (fensterA === fensterB) { hinweise.push('fenster_gleich'); }\n        if (unterschied > 0) { hinweise.push('mehr_gezaehlt'); }\n        hinweise.push('bruch');\n        if (anteilKurz > 0 && fensterKurz < fensterA) { hinweise.push('kurzfenster'); }\n        if (faktor !== null &#038;&#038; faktor !== 1) { hinweise.push('bestand_faktor'); }\n        hinweise.push('bestand_annahme');\n        if (!verteilung.brauchbar &#038;&#038; median > 0) { hinweise.push('schwanz'); }<\/p>\n<p>        return {\n            anteilA: aA, anteilB: aB, anteilKurzFenster: aKurz,\n            gemeldetA: gemeldetA, gemeldetB: gemeldetB,\n            unterschied: unterschied, relativ: relativ,\n            grenzertrag: grenzertrag,\n            tabelle: tabelle,\n            gemischt: gemischt, einheitlich: einheitlich,\n            verlustAnteil: verlustAnteil, verlustAbsolut: verlustAbsolut,\n            bestandA: bestandA, bestandB: bestandB, faktor: faktor,\n            quelle: verteilung.brauchbar ? 'verteilung' : 'modell',\n            verworfen: verteilung.ungueltig,\n            hinweise: hinweise\n        };\n    }<\/p>\n<p>    \/\/ --- Pruefpunkt ----------------------------------------------------------\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.KF = {\n        rechnen: rechnen,\n        anteilAus: anteilAus,\n        verteilungLesen: verteilungLesen,\n        TABELLE: TABELLE,\n        T: T\n    };<\/p>\n<p>    \/\/ --- Oberflaeche ---------------------------------------------------------<\/p>\n<p>    var btn = document.getElementById('kf-btn');\n    var out = document.getElementById('kf-ausgabe');\n    if (!btn || !out) { return; }<\/p>\n<p>    function el(tag, stil, text) {\n        var e = document.createElement(tag);\n        if (stil) { e.setAttribute('style', stil); }\n        if (text !== undefined) { e.textContent = text; }\n        return e;\n    }\n    function wert(id) { var e = document.getElementById(id); return e ? e.value : ''; }\n    function komma(n, stellen) {\n        if (!isFinite(n)) { return '-'; }\n        return Number(n).toFixed(stellen === undefined ? 0 : stellen).replace('.', T.dezimal);\n    }\n    function prozent(a, stellen) {\n        if (a === null || !isFinite(a)) { return '-'; }\n        return komma(a * 100, stellen === undefined ? 1 : stellen) + ' %';\n    }<\/p>\n<p>    var UEBERSCHRIFT = 'font-family: \"Nunito Sans\", sans-serif; font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.92rem; margin: 18px 0 8px;';\n    var ZELLE = 'padding: 5px 12px 5px 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem;';\n    var ZELLE_WERT = 'padding: 5px 12px 5px 0; color: var(--text-primary, #e8e8ee); font-size: 0.87rem; font-family: monospace;';\n    var GUT = ' color: #7ee787;';\n    var WARN = ' color: #ffa94d;';<\/p>\n<p>    function gitter(spalten) {\n        return el('div', 'display: grid; grid-template-columns: ' + spalten + '; gap: 0 18px; align-items: baseline;');\n    }\n    function paar(g, name, w, stil) {\n        g.appendChild(el('div', ZELLE, name));\n        g.appendChild(el('div', ZELLE_WERT + (stil || ''), w));\n    }<\/p>\n<p>    btn.addEventListener('click', function () {\n        var erg = rechnen({\n            taeglich: wert('kf-taeglich'),\n            median: wert('kf-median'),\n            verteilung: wert('kf-verteilung'),\n            fensterA: wert('kf-fenstera'),\n            fensterB: wert('kf-fensterb'),\n            anteilKurz: wert('kf-anteilkurz'),\n            fensterKurz: wert('kf-fensterkurz'),\n            zulauf: wert('kf-zulauf'),\n            dauerA: wert('kf-dauera'),\n            dauerB: wert('kf-dauerb')\n        });\n        out.innerHTML = '';<\/p>\n<p>        \/\/ --- Fenstervergleich ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_fenster));\n        var g1 = gitter('auto auto');\n        paar(g1, T.zeile_quelle, erg.quelle === 'verteilung' ? T.quelle_verteilung : T.quelle_modell);\n        paar(g1, T.zeile_anteila, prozent(erg.anteilA));\n        paar(g1, T.zeile_anteilb, prozent(erg.anteilB));\n        paar(g1, T.zeile_gemeldeta, komma(erg.gemeldetA, 1));\n        paar(g1, T.zeile_gemeldetb, komma(erg.gemeldetB, 1));\n        paar(g1, T.zeile_unterschied, komma(erg.unterschied, 1)\n            + (erg.relativ === null ? '' : '  (' + prozent(erg.relativ) + ')'),\n            erg.unterschied > 0 ? WARN : '');\n        paar(g1, T.zeile_grenzertrag, komma(erg.grenzertrag, 2));\n        out.appendChild(g1);<\/p>\n<p>        \/\/ --- Tabelle ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_tabelle));\n        var tab = gitter('auto auto auto');\n        tab.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', T.spalte_fenster));\n        tab.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', T.spalte_anteil));\n        tab.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', T.spalte_gemeldet));\n        erg.tabelle.forEach(function (r) {\n            tab.appendChild(el('div', ZELLE_WERT, komma(r.fenster) + ' ' + T.einheit_tage));\n            tab.appendChild(el('div', ZELLE_WERT, prozent(r.anteil)));\n            tab.appendChild(el('div', ZELLE_WERT, komma(r.gemeldet, 1)));\n        });\n        out.appendChild(tab);<\/p>\n<p>        \/\/ --- Geteilte Fenster ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_geteilt));\n        var g2 = gitter('auto auto');\n        paar(g2, T.zeile_einheitlich, prozent(erg.einheitlich));\n        paar(g2, T.zeile_gemischt, prozent(erg.gemischt), erg.verlustAnteil > 0 ? WARN : '');\n        paar(g2, T.zeile_verlust, prozent(erg.verlustAnteil) + '  (' + komma(erg.verlustAbsolut, 1) + ')',\n            erg.verlustAnteil > 0 ? WARN : GUT);\n        out.appendChild(g2);<\/p>\n<p>        \/\/ --- Zielgruppenbestand ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_bestand));\n        var g3 = gitter('auto auto');\n        paar(g3, T.zeile_bestanda, komma(erg.bestandA));\n        paar(g3, T.zeile_bestandb, komma(erg.bestandB));\n        paar(g3, T.zeile_faktor, erg.faktor === null ? '-' : (komma(erg.faktor, 2) + ' x'),\n            erg.faktor !== null && erg.faktor !== 1 ? WARN : '');\n        out.appendChild(g3);<\/p>\n<p>        \/\/ --- Hinweise ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_hinweise));\n        var liste = el('ul', 'margin: 0 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem; line-height: 1.65;');\n        erg.hinweise.forEach(function (h) {\n            var text = T['hinweis_' + h];\n            if (!text) { return; }\n            text = text.replace('{faktor}', erg.faktor === null ? '-' : komma(erg.faktor, 2))\n                .replace('{verworfen}', erg.verworfen.join(', '));\n            liste.appendChild(el('li', '', text));\n        });\n        out.appendChild(liste);\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Widening a conversion window raises the reported figure without a single extra sale, a short window on one class of touch quietly drops the rest, and an audience list is its daily inflow times its duration. Three settings, three arithmetic consequences.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":38,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[91383,91261,91288],"class_list":["post-13051","page","type-page","status-publish","hentry","tag-attribution","tag-conversion-tracking","tag-google-ads"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Conversion Window and Audience Duration Calculator - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Conversion Window and Audience Duration Calculator - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Widening a conversion window raises the reported figure without a single extra sale, a short window on one class of touch quietly drops the rest, and an audience list is its daily inflow times its duration. Three settings, three arithmetic consequences.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/conversion-window-audience-duration-calculator\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/conversion-window-audience-duration-calculator\\\/\",\"name\":\"Conversion Window and Audience Duration Calculator - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-28T11:39:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/conversion-window-audience-duration-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/conversion-window-audience-duration-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/conversion-window-audience-duration-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/toolbox\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Conversion Window and Audience Duration Calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Conversion Window and Audience Duration Calculator - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/","og_locale":"en_US","og_type":"article","og_title":"Conversion Window and Audience Duration Calculator - Lukas Wojcik - Blog","og_description":"Widening a conversion window raises the reported figure without a single extra sale, a short window on one class of touch quietly drops the rest, and an audience list is its daily inflow times its duration. Three settings, three arithmetic consequences.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/","name":"Conversion Window and Audience Duration Calculator - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-28T11:39:14+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/conversion-window-audience-duration-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/"},{"@type":"ListItem","position":3,"name":"Conversion Window and Audience Duration Calculator"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/13051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13051"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/13051\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/38"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13051"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}