{"id":9369,"date":"2026-08-12T11:50:00","date_gmt":"2026-08-12T09:50:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=9369"},"modified":"2026-10-09T23:25:56","modified_gmt":"2026-10-09T21:25:56","slug":"retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/","title":{"rendered":"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Od 1.06.2026 dane w Google Ads maj\u0105 termin wa\u017cno\u015bci. Dane o skuteczno\u015bci s\u0105 przechowywane przez 37 miesi\u0119cy, historia zmian na koncie przez 11 lat, dane Reach and Frequency przez 3 lata. Dzi\u015b jest 10.08.2026, wi\u0119c najstarszy dzie\u0144 z danymi o skuteczno\u015bci, jaki da si\u0119 jeszcze pobra\u0107, to 10.07.2023 \u2014 a ta granica przesuwa si\u0119 do przodu o jeden dzie\u0144 ka\u017cdego dnia. Je\u017celi historia raportowania istnieje wy\u0142\u0105cznie wewn\u0105trz Google Ads, to po cichu ubywa jej po jednym dniu dziennie. Ten artyku\u0142 wykonuje potrzebne wyliczenia, prostuje liczby b\u0142\u0119dnie przytaczane przy okazji tej zmiany i buduje wznawialne zadanie backfill, kt\u00f3re przenosi wszystko powy\u017cej granicy do w\u0142asnej hurtowni danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Co naprawd\u0119 m\u00f3wi strona o retencji danych Google Ads<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Udokumentowane s\u0105 trzy okna \u2014 i tylko trzy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>37 miesi\u0119cy<\/strong> dla danych o skuteczno\u015bci.<\/li>\n<li><strong>11 lat<\/strong> dla historii zmian na koncie.<\/li>\n<li><strong>3 lata<\/strong> dla Reach and Frequency.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wi\u0119kszo\u015b\u0107 om\u00f3wie\u0144 tej zmiany niesie ze sob\u0105 trzy dodatkowe liczby: 36 miesi\u0119cy dla GA Data API, 24 miesi\u0105ce dla BigQuery Data Transfer Service, 24 miesi\u0105ce dla DV360 i CM360. Tych warto\u015bci nie ma na stronie pomocy Google Ads, kt\u00f3ra og\u0142osi\u0142a okna retencji. W zakresie tego og\u0142oszenia pozostaj\u0105 nieudokumentowane, a powtarzanie ich tak, jakby stanowi\u0142y jego cz\u0119\u015b\u0107, to dok\u0142adnie ten mechanizm, w kt\u00f3rym plotka zamienia si\u0119 w za\u0142o\u017cenie planistyczne. Planowanie powinno opiera\u0107 si\u0119 na trzech powy\u017cszych warto\u015bciach. Je\u017celi potrzebna jest warto\u015b\u0107 retencji dla GA4, dla transfer\u00f3w BigQuery albo dla DV360 i CM360, nale\u017cy wzi\u0105\u0107 j\u0105 z dokumentacji danego produktu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jeden szczeg\u00f3\u0142 \u0142atwo przeoczy\u0107: 37 miesi\u0119cy to wi\u0119cej ni\u017c trzy lata. Reach and Frequency wygasa zatem mniej wi\u0119cej miesi\u0105c <em>przed<\/em> danymi o skuteczno\u015bci dotycz\u0105cymi tych samych kampanii. Przy zabezpieczaniu obu zbior\u00f3w to R&amp;F ma kr\u00f3tszy termin, a nie d\u0142u\u017cszy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Wyliczenie w\u0142asnego terminu i ustalenie, co ju\u017c przepad\u0142o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Granica jest ruchoma, nie jest pojedynczym ci\u0119ciem, kt\u00f3re nast\u0105pi\u0142o w czerwcu. Lepiej j\u0105 wylicza\u0107, ni\u017c zapami\u0119tywa\u0107:<\/p>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> datetime <span class=\"cbb-keyword\">import<\/span> date\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> dateutil.relativedelta <span class=\"cbb-keyword\">import<\/span> relativedelta\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">today = <span class=\"cbb-function\">date<\/span>(<span class=\"cbb-number\">2026<\/span>, <span class=\"cbb-number\">8<\/span>, <span class=\"cbb-number\">10<\/span>)\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">print<\/span>(today - <span class=\"cbb-function\">relativedelta<\/span>(months=<span class=\"cbb-number\">37<\/span>))  <span class=\"cbb-comment\"># dane performance 2023-07-10<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">print<\/span>(today - <span class=\"cbb-function\">relativedelta<\/span>(years=<span class=\"cbb-number\">3<\/span>))    <span class=\"cbb-comment\"># reach, frequency 2023-08-10<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">print<\/span>(today - <span class=\"cbb-function\">relativedelta<\/span>(years=<span class=\"cbb-number\">11<\/span>))   <span class=\"cbb-comment\"># historia zmian   2015-08-10<\/span><\/span><\/code><\/pre><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Wszystko, co ma dat\u0119 wcze\u015bniejsz\u0105 ni\u017c 10.07.2023, jest ju\u017c nie do odzyskania przez API. Jutro t\u0105 dat\u0105 b\u0119dzie 11.07.2023. Zanim powstanie jakikolwiek kod eksportu, warto ustali\u0107, jaka cz\u0119\u015b\u0107 wci\u0105\u017c dost\u0119pnego zakresu faktycznie znajduje si\u0119 w lokalnym zasobie. Dla hurtowni na Postgresie z tabel\u0105 dzienn\u0105:<\/p>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"sql\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">SQL<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-sql\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">WITH<\/span> expected <span class=\"cbb-keyword\">AS<\/span> (\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">SELECT<\/span> <span class=\"cbb-function\">generate_series<\/span>(<span class=\"cbb-type\">DATE<\/span> <span class=\"cbb-string\">'2023-07-10'<\/span>, CURRENT_DATE - <span class=\"cbb-number\">1<\/span>, <span class=\"cbb-keyword\">INTERVAL<\/span> <span class=\"cbb-string\">'1 day'<\/span>)::<span class=\"cbb-type\">date<\/span> <span class=\"cbb-keyword\">AS<\/span> d\n<\/span><span class=\"cbb-line\">)\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">SELECT<\/span> <span class=\"cbb-function\">count<\/span>(*) <span class=\"cbb-keyword\">AS<\/span> missing_days, <span class=\"cbb-function\">min<\/span>(e.d) <span class=\"cbb-keyword\">AS<\/span> oldest_gap, <span class=\"cbb-function\">max<\/span>(e.d) <span class=\"cbb-keyword\">AS<\/span> newest_gap\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">FROM<\/span> expected e\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">LEFT<\/span> <span class=\"cbb-keyword\">JOIN<\/span> ads_daily a <span class=\"cbb-keyword\">ON<\/span> a.day = e.d\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">WHERE<\/span> a.day <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>;<\/span><\/code><\/pre><\/figure>\n\n\n<p class=\"wp-block-paragraph\">To samo zapytanie nale\u017cy uruchomi\u0107 z pocz\u0105tkiem okna ustawionym na w\u0142asny najwcze\u015bniejszy oczekiwany dzie\u0144. Wszystko, co zostanie zg\u0142oszone poni\u017cej 2023-07-10, to trwa\u0142a dziura; wszystko powy\u017cej to praca, kt\u00f3r\u0105 wci\u0105\u017c da si\u0119 wykona\u0107.<\/p>\n\n\n\n<figure class=\"lw-diagram\">\n<img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/hand-adsretention-pl.png\" width=\"1120\" height=\"660\" loading=\"lazy\" alt=\"O\u015b czasu z 37-miesi\u0119cznym oknem retencji, kt\u00f3rego lewa kraw\u0119d\u017a przesuwa si\u0119 codziennie, a starsze dane wypadaj\u0105 do samodzielnie hostowanego warehouse\">\n<figcaption>Trzy limity, jedna ruchoma kraw\u0119d\u017a. Wszystko na lewo od niej ju\u017c opu\u015bci\u0142o Google Ads. Zadanie eksportu ma wi\u0119c sens tylko dop\u00f3ki wyprzedza kraw\u0119d\u017a, a nie goni j\u0105.<\/figcaption>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">3. Zadanie backfill, kt\u00f3re si\u0119 wznawia<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nie podaj\u0119 tu osobnej listy p\u00f3l GAQL: wykorzystaj list\u0119 z raportu, kt\u00f3ry ju\u017c dzia\u0142a. Przenie\u015b jego zas\u00f3b, segment daty i wybrane pola do pliku konfiguracyjnego. Samo zadanie b\u0119dzie wtedy wyznacza\u0107 tylko zakres dat do pobrania:<\/p>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"json\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JSON<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-json\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">{\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">\"customer_id\"<\/span>: <span class=\"cbb-string\">\"1234567890\"<\/span>,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">\"dsn\"<\/span>: <span class=\"cbb-string\">\"postgresql:\/\/ads@localhost\/warehouse\"<\/span>,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">\"resource\"<\/span>:   <span class=\"cbb-string\">\"&lt;the resource your existing report reads&gt;\"<\/span>,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">\"date_field\"<\/span>: <span class=\"cbb-string\">\"&lt;the date segment that report groups by&gt;\"<\/span>,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">\"fields\"<\/span>:     &#91;<span class=\"cbb-string\">\"&lt;field 1&gt;\"<\/span>, <span class=\"cbb-string\">\"&lt;field 2&gt;\"<\/span>&#93;,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">\"query_template\"<\/span>: <span class=\"cbb-string\">\"SELECT {fields} FROM {resource} WHERE {date_field} BETWEEN '{start}' AND '{end}'\"<\/span>,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-attr\">\"oldest_wanted\"<\/span>: <span class=\"cbb-string\">\"2019-01-01\"<\/span>\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Runner pobiera dok\u0142adnie jedno okno na wywo\u0142anie i je odnotowuje. Stan to cztery kolumny: <code>customer_id<\/code>, <code>window_start<\/code>, <code>window_end<\/code>, <code>rows<\/code>, zapisywane w tej samej transakcji co dane, wi\u0119c awaria oznacza po prostu powt\u00f3rzenie okna.<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> json\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> datetime <span class=\"cbb-keyword\">import<\/span> date, timedelta\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> dateutil.relativedelta <span class=\"cbb-keyword\">import<\/span> relativedelta\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> psycopg\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">CFG, CHUNK = json.<span class=\"cbb-function\">load<\/span>(<span class=\"cbb-function\">open<\/span>(<span class=\"cbb-string\">\"\/etc\/ads-backfill\/config.json\"<\/span>)), <span class=\"cbb-function\">timedelta<\/span>(days=<span class=\"cbb-number\">7<\/span>)\n<\/span><span class=\"cbb-line\">CID = CFG&#91;<span class=\"cbb-string\">\"customer_id\"<\/span>&#93;\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">next_window<\/span>(cur):\n<\/span><span class=\"cbb-line\">    cur.<span class=\"cbb-function\">execute<\/span>(<span class=\"cbb-string\">\"SELECT max(window_end) FROM backfill_state WHERE customer_id = %s\"<\/span>, (CID,))\n<\/span><span class=\"cbb-line\">    (last,) = cur.<span class=\"cbb-function\">fetchone<\/span>()\n<\/span><span class=\"cbb-line\">    floor = <span class=\"cbb-function\">max<\/span>(date.<span class=\"cbb-function\">today<\/span>() - <span class=\"cbb-function\">relativedelta<\/span>(months=<span class=\"cbb-number\">37<\/span>),\n<\/span><span class=\"cbb-line\">                date.<span class=\"cbb-function\">fromisoformat<\/span>(CFG&#91;<span class=\"cbb-string\">\"oldest_wanted\"<\/span>&#93;))\n<\/span><span class=\"cbb-line\">    start = last + <span class=\"cbb-function\">timedelta<\/span>(days=<span class=\"cbb-number\">1<\/span>) <span class=\"cbb-keyword\">if<\/span> last <span class=\"cbb-keyword\">else<\/span> floor\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> start &lt; floor:                    <span class=\"cbb-comment\"># zadanie stan\u0119\u0142o, te dni wygas\u0142y<\/span>\n<\/span><span class=\"cbb-line\">        cur.<span class=\"cbb-function\">execute<\/span>(<span class=\"cbb-string\">\"INSERT INTO backfill_lost VALUES (%s, %s, %s)\"<\/span>,\n<\/span><span class=\"cbb-line\">                    (CID, start, floor - <span class=\"cbb-function\">timedelta<\/span>(days=<span class=\"cbb-number\">1<\/span>)))\n<\/span><span class=\"cbb-line\">        start = floor\n<\/span><span class=\"cbb-line\">    end = <span class=\"cbb-function\">min<\/span>(start + CHUNK - <span class=\"cbb-function\">timedelta<\/span>(days=<span class=\"cbb-number\">1<\/span>), date.<span class=\"cbb-function\">today<\/span>() - <span class=\"cbb-function\">timedelta<\/span>(days=<span class=\"cbb-number\">1<\/span>))\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> (start, end) <span class=\"cbb-keyword\">if<\/span> start &lt;= end <span class=\"cbb-keyword\">else<\/span> <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">with<\/span> psycopg.<span class=\"cbb-function\">connect<\/span>(CFG&#91;<span class=\"cbb-string\">\"dsn\"<\/span>&#93;) <span class=\"cbb-keyword\">as<\/span> conn, conn.<span class=\"cbb-function\">cursor<\/span>() <span class=\"cbb-keyword\">as<\/span> cur:\n<\/span><span class=\"cbb-line\">    win = <span class=\"cbb-function\">next_window<\/span>(cur)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> win:\n<\/span><span class=\"cbb-line\">        start, end = win\n<\/span><span class=\"cbb-line\">        rows = <span class=\"cbb-function\">run_report<\/span>(CID, CFG&#91;<span class=\"cbb-string\">\"query_template\"<\/span>&#93;.<span class=\"cbb-function\">format<\/span>(\n<\/span><span class=\"cbb-line\">            fields=<span class=\"cbb-string\">\", \"<\/span>.<span class=\"cbb-function\">join<\/span>(CFG&#91;<span class=\"cbb-string\">\"fields\"<\/span>&#93;), resource=CFG&#91;<span class=\"cbb-string\">\"resource\"<\/span>&#93;,\n<\/span><span class=\"cbb-line\">            date_field=CFG&#91;<span class=\"cbb-string\">\"date_field\"<\/span>&#93;, start=start, end=end))\n<\/span><span class=\"cbb-line\">        cur.<span class=\"cbb-function\">executemany<\/span>(CFG&#91;<span class=\"cbb-string\">\"insert_sql\"<\/span>&#93;, rows)\n<\/span><span class=\"cbb-line\">        cur.<span class=\"cbb-function\">execute<\/span>(<span class=\"cbb-string\">\"INSERT INTO backfill_state VALUES (%s, %s, %s, %s, now())\"<\/span>,\n<\/span><span class=\"cbb-line\">                    (CID, start, end, <span class=\"cbb-function\">len<\/span>(rows)))\n<\/span><span class=\"cbb-line\">        conn.<span class=\"cbb-function\">commit<\/span>()<\/span><\/code><\/pre><\/figure>\n\n\n<p class=\"wp-block-paragraph\"><code>run_report<\/code> to istniej\u0105cy wrapper API, niezale\u017cnie od tego, jak\u0105 bibliotek\u0119 klienck\u0105 opakowuje. Ca\u0142a reszta pliku dzia\u0142a po stronie lokalnej: w\u0142asna konfiguracja, w\u0142asna tabela, w\u0142asne granice transakcji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Cron, kolejno\u015b\u0107 i rejestr strat<\/h2>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-comment\"># \/etc\/cron.d\/ads-backfill \u2014 jedno okno na godzin\u0119, najstarsze najpierw<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-number\">7<\/span> * * * * ads \/opt\/ads-backfill\/.venv\/bin\/<span class=\"cbb-function\">python<\/span> \/opt\/ads-backfill\/backfill.py <span class=\"cbb-operator\">&gt;&gt;<\/span> \/var\/log\/ads-backfill.log <span class=\"cbb-number\">2<\/span><span class=\"cbb-operator\">&gt;<\/span>&amp;<span class=\"cbb-number\">1<\/span><\/span><\/code><\/pre><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Dwie rzeczy w tym zadaniu s\u0105 zamierzone. Idzie ono <strong>do przodu od granicy<\/strong>, a nie wstecz od dzisiaj, poniewa\u017c tylko najstarsze dane maj\u0105 termin; ostatnie dni mog\u0105 poczeka\u0107. A kiedy okazuje si\u0119, \u017ce granica wyprzedzi\u0142a jego w\u0142asny post\u0119p, zadanie nie pomija po cichu luki, lecz zapisuje ten przedzia\u0142 do tabeli <code>backfill_lost<\/code>. Ta tabela jest uczciw\u0105 odpowiedzi\u0105 na pytanie \u201ekt\u00f3rych okres\u00f3w ju\u017c nie mamy\u201d i warto umie\u015bci\u0107 j\u0105 na dashboardzie obok zapytania o luki z sekcji 2.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Arytmetyka jest wygodna. Od 10.07.2023 do wczoraj mija 1126 dni, czyli 161 okien po siedem dni. Przy jednym oknie na godzin\u0119 daje to nieca\u0142e siedem dni czasu rzeczywistego, w trakcie kt\u00f3rych granica przesuwa si\u0119 o siedem dni: na ka\u017cdy utracony dzie\u0144 historii przypada 168 dni zyskanych. Po zamkni\u0119ciu zaleg\u0142o\u015bci to samo zadanie utrzymuje bie\u017c\u0105cy koniec zakresu w aktualno\u015bci i kosztuje jedno wywo\u0142anie API na godzin\u0119.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Podsumowanie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Powsta\u0142a granica, kt\u00f3r\u0105 si\u0119 wylicza zamiast zapami\u0119tywa\u0107, zapytanie wskazuj\u0105ce, kt\u00f3rych dni z wci\u0105\u017c dost\u0119pnego okna brakuje w hurtowni, runner obs\u0142uguj\u0105cy jedno okno, kt\u00f3ry czysto wznawia si\u0119 po awarii i sam dostosowuje si\u0119 do bie\u017c\u0105cego odci\u0119cia, godzinowy wpis w cronie oraz rejestr okres\u00f3w b\u0119d\u0105cych ju\u017c poza zasi\u0119giem. Ca\u0142e zaleg\u0142o\u015bci od 10.07.2023 zamykaj\u0105 si\u0119 w mniej wi\u0119cej tydzie\u0144 pracy bez nadzoru, po czym zadanie przechodzi w tryb utrzymaniowy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zyskiem jest to, \u017ce historia raportowania przestaje by\u0107 cudz\u0105 polityk\u0105 retencji. Por\u00f3wnania rok do roku, modele sezonowo\u015bci i przebudowy atrybucji pr\u0119dzej czy p\u00f3\u017aniej potrzebuj\u0105 danych starszych ni\u017c 37 miesi\u0119cy, a po 1.06.2026 jedyn\u0105 wci\u0105\u017c istniej\u0105c\u0105 kopi\u0105 b\u0119dzie ta przechowywana lokalnie. Trzy udokumentowane okna warto potwierdzi\u0107 w \u017ar\u00f3dle pierwotnym i zignorowa\u0107 kr\u0105\u017c\u0105ce obok nich dodatkowe liczby: <a href=\"https:\/\/support.google.com\/google-ads\/answer\/15188209\">polityka retencji danych Google Ads<\/a>.<\/p>\n\n\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n\n<h3>Dlaczego zadanie backfill pobiera tylko jedno okno na godzin\u0119, skoro p\u0119tla zamkn\u0119\u0142aby zaleg\u0142o\u015bci w jedn\u0105 noc?<\/h3>\n<p>P\u0119tla zamkn\u0119\u0142aby zaleg\u0142o\u015bci szybciej, ale z rachunku w artykule wynika, \u017ce to niepotrzebne: wy\u015bcigu nie ma. Przy jednym oknie na godzin\u0119 zaleg\u0142o\u015bci domykaj\u0105 si\u0119 w nieca\u0142y tydzie\u0144, a granica przesuwa si\u0119 w tym czasie o siedem dni. Nic nie ucieka.<\/p>\n<p>Powolne tempo kupuje natomiast dwie rzeczy. Nie zu\u017cywa limit\u00f3w API na tyle, \u017ceby przeszkodzi\u0107 raportom, kt\u00f3re i tak dzia\u0142aj\u0105 w tle, a to one zwykle padaj\u0105 pierwsze, gdy kto\u015b uruchomi masowe pobieranie. Daje te\u017c czas na zauwa\u017cenie b\u0142\u0119du: je\u017celi okno pobiera si\u0119 z niepe\u0142nymi polami albo z pomy\u0142k\u0105 w konfiguracji, problem narasta o tydzie\u0144 historii na godzin\u0119, zamiast obj\u0105\u0107 w jedn\u0105 noc ca\u0142e 37 miesi\u0119cy.<\/p>\n<p>Warto tylko obserwowa\u0107 dwie rzeczy: rosn\u0105c\u0105 tabel\u0119 utraconych zakres\u00f3w, <code>backfill_lost<\/code>, i przyrost okien w <code>backfill_state<\/code>. Je\u017celi zadanie stanie na d\u0142u\u017cej, z powodu wygas\u0142ego tokenu albo awarii serwera, granica mo\u017ce dogoni\u0107 jego post\u0119p, a utracone dni trafi\u0105 do <code>backfill_lost<\/code>. To jedyny scenariusz, w kt\u00f3rym warto przyspieszy\u0107, i wtedy wida\u0107 go w danych, a nie w domys\u0142ach. Wpis o utraconym zakresie powstaje jednak dopiero razem z pierwszym udanym oknem po przerwie, bo w kodzie z artyku\u0142u zatwierdza go to samo <code>conn.commit()<\/code> co dane okna. Sam\u0105 przerw\u0119 wcze\u015bniej zdradza <code>backfill_state<\/code>, w kt\u00f3rym przestaj\u0105 przybywa\u0107 nowe okna.<\/p>\n<\/div>\n\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/support.google.com\/google-ads\/answer\/15188209\" target=\"_blank\" rel=\"noopener noreferrer\">Google Ads Data Retention Policy<\/a><\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Google Ads usuwa teraz dane o skuteczno\u015bci po 37 miesi\u0105cach, a granica przesuwa si\u0119 ka\u017cdego dnia. Oto wyliczenia, wznawialne zadanie backfill oraz liczby, kt\u00f3re s\u0105 powszechnie przytaczane b\u0142\u0119dnie.<\/p>\n","protected":false},"author":1,"featured_media":15127,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[92061,92084,92038,92074],"class_list":["post-9369","post","type-post","status-publish","format-standard","hentry","category-digital-marketing-pl","tag-automation-pl","tag-bigquery-pl","tag-marketing-cyfrowy-pl-pl","tag-google-ads-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Archiwizacja danych Google Ads: granice retencji, wznawianie eksport\u00f3w historycznych i rejestrowanie strat przy backfillu.\" \/>\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\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Archiwizacja danych Google Ads: granice retencji, wznawianie eksport\u00f3w historycznych i rejestrowanie strat przy backfillu.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-12T09:50:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-09T21:25:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9369-retencja-danych-google-ads-37-miesie-n.png\" \/>\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\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill\",\"datePublished\":\"2026-08-12T09:50:00+00:00\",\"dateModified\":\"2026-10-09T21:25:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/\"},\"wordCount\":1149,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9369-retencja-danych-google-ads-37-miesie-n.png\",\"keywords\":[\"Automation\",\"BigQuery\",\"Digital Marketing\",\"Google Ads\"],\"articleSection\":[\"Digital Marketing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/\",\"name\":\"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9369-retencja-danych-google-ads-37-miesie-n.png\",\"datePublished\":\"2026-08-12T09:50:00+00:00\",\"dateModified\":\"2026-10-09T21:25:56+00:00\",\"description\":\"Archiwizacja danych Google Ads: granice retencji, wznawianie eksport\u00f3w historycznych i rejestrowanie strat przy backfillu.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9369-retencja-danych-google-ads-37-miesie-n.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9369-retencja-danych-google-ads-37-miesie-n.png\",\"width\":1200,\"height\":630,\"caption\":\"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill\"}]},{\"@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\":\"Lukas Wojcik\",\"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\":\"Lukas Wojcik\"},\"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":"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill | Lukas Wojcik","description":"Archiwizacja danych Google Ads: granice retencji, wznawianie eksport\u00f3w historycznych i rejestrowanie strat przy backfillu.","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\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/","og_locale":"en_US","og_type":"article","og_title":"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill | Lukas Wojcik","og_description":"Archiwizacja danych Google Ads: granice retencji, wznawianie eksport\u00f3w historycznych i rejestrowanie strat przy backfillu.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-12T09:50:00+00:00","article_modified_time":"2026-10-09T21:25:56+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9369-retencja-danych-google-ads-37-miesie-n.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill","datePublished":"2026-08-12T09:50:00+00:00","dateModified":"2026-10-09T21:25:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/"},"wordCount":1149,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9369-retencja-danych-google-ads-37-miesie-n.png","keywords":["Automation","BigQuery","Digital Marketing","Google Ads"],"articleSection":["Digital Marketing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/","name":"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9369-retencja-danych-google-ads-37-miesie-n.png","datePublished":"2026-08-12T09:50:00+00:00","dateModified":"2026-10-09T21:25:56+00:00","description":"Archiwizacja danych Google Ads: granice retencji, wznawianie eksport\u00f3w historycznych i rejestrowanie strat przy backfillu.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9369-retencja-danych-google-ads-37-miesie-n.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9369-retencja-danych-google-ads-37-miesie-n.png","width":1200,"height":630,"caption":"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/retencja-danych-google-ads-37-miesiecy-danych-o-skutecznosci-i-wznawialne\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Retencja danych Google Ads: 37 miesi\u0119cy danych o skuteczno\u015bci i wznawialne zadanie backfill"}]},{"@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":"Lukas Wojcik","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":"Lukas Wojcik"},"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\/posts\/9369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"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=9369"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9369\/revisions"}],"predecessor-version":[{"id":22348,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9369\/revisions\/22348"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/15127"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=9369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=9369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=9369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}