{"id":9315,"date":"2026-08-09T15:37:24","date_gmt":"2026-08-09T13:37:24","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/ga4-pii-checker\/"},"modified":"2026-08-28T16:15:02","modified_gmt":"2026-08-28T14:15:02","slug":"ga4-pii-checker","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-pii-checker\/","title":{"rendered":"GA4 PII Checker"},"content":{"rendered":"<p><script src=\"https:\/\/accounts.google.com\/gsi\/client\" async defer><\/script><\/p>\n<div class=\"ga4-pii-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<div class=\"lw-aussenhinweis\" style=\"background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-left: 3px solid #fbbf24; border-radius: 6px; padding: 14px 16px; margin-bottom: 20px;\">\n<div style=\"color: #fbbf24; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; margin-bottom: 6px;\">Ben\u00f6tigt eine Google-Anmeldung<\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); margin: 0 0 8px; font-size: 0.9rem; line-height: 1.55;\">Anders als die \u00fcbrigen Werkzeuge hier arbeitet dieses nicht f\u00fcr sich allein. Es liest aus der Google Analytics Data API v1 und verlangt daf\u00fcr eine Anmeldung bei Google. Das angeforderte Recht lautet analytics.readonly und ist ausschlie\u00dflich lesend \u2014 \u00e4ndern l\u00e4sst sich dar\u00fcber nichts.<\/p>\n<p style=\"color: var(--text-secondary, #a0a0b0); margin: 0; font-size: 0.9rem; line-height: 1.55;\">Was geholt wird, bleibt in dieser Registerkarte: Die Auswertung l\u00e4uft im Browser, an lukaswojcik.com geht nichts. Die unten vorbelegte OAuth-Client-ID l\u00e4sst sich durch eine eigene ersetzen.<\/p>\n<\/div>\n<p style=\"color: var(--text-secondary); margin-bottom: 20px; line-height: 1.6;\">\n        Verbindet sich per OAuth 2.0 direkt mit der <strong>Google Analytics Data API v1<\/strong>.<br \/>\n        Durchsucht die Seitenberichte einer Property nach personenbezogenen Daten (PII) wie E-Mail-Adressen, Telefonnummern oder eindeutigen Nutzerkennungen in den Abfrageparametern der URL. Alle Pr\u00fcfungen laufen lokal im Browser.\n    <\/p>\n<p>    <!-- STEP 1: OAUTH & AUTHENTICATION --><\/p>\n<div style=\"background: var(--bg-body, #101416); padding: 20px; border-radius: 8px; border: 1px solid var(--border); margin-bottom: 20px;\">\n<h3 style=\"color: var(--accent); font-size: 1rem; margin-top: 0; margin-bottom: 12px;\">1. Authentifizierung an der Google Analytics API<\/h3>\n<div style=\"display: flex; gap: 15px; flex-wrap: wrap; align-items: flex-end;\">\n<div style=\"flex: 1; min-width: 280px;\">\n                <label style=\"color: var(--text-secondary); display: block; font-size: 0.85rem; margin-bottom: 6px;\">Google Cloud OAuth Client ID:<\/label><br \/>\n                <input type=\"text\" id=\"ga4-client-id\" value=\"423029313598-2ko0jilc28eevp253rqncvodg2181e1l.apps.googleusercontent.com\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-panel); border: 1px solid var(--border); color: var(--text-primary); border-radius: 6px; font-family: monospace;\">\n            <\/div>\n<div>\n                <button id=\"ga4-auth-btn\" class=\"button\" style=\"background: var(--accent); color: var(--on-accent); border: none; padding: 11px 22px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Mit Google autorisieren<\/button>\n            <\/div>\n<\/p><\/div>\n<div data-mp-mask id=\"ga4-auth-status\" style=\"margin-top: 10px; font-size: 0.85rem; color: var(--text-secondary);\">Status: <strong style=\"color: #ff6b6b;\">Nicht verbunden<\/strong><\/div>\n<\/p><\/div>\n<p>    <!-- STEP 2: PROPERTY & SCAN CONFIGURATION --><\/p>\n<div id=\"ga4-config-panel\" style=\"background: var(--bg-body); padding: 20px; border-radius: 8px; border: 1px solid var(--border); margin-bottom: 20px; display: none;\">\n<h3 style=\"color: var(--accent); font-size: 1rem; margin-top: 0; margin-bottom: 12px;\">2. Property und Pr\u00fcfumfang festlegen<\/h3>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-bottom: 15px;\">\n<div>\n                <label style=\"color: var(--text-secondary); display: block; font-size: 0.85rem; margin-bottom: 6px;\">GCP Project ID (optionale Angabe):<\/label><br \/>\n                <input type=\"text\" id=\"gcp-project-id\" value=\"lukaswojcik\" placeholder=\"z. B. my-gcp-project-123\" style=\"width: 100%; padding: 10px; background: var(--bg-panel); color: var(--text-primary); border: 1px solid var(--border); border-radius: 6px; font-family: monospace;\">\n            <\/div>\n<div>\n                <label style=\"color: var(--text-secondary); display: block; font-size: 0.85rem; margin-bottom: 6px;\">GA4 Property ID (numerisch):<\/label><br \/>\n                <input type=\"text\" id=\"ga4-property-id\" placeholder=\"z. B. 345678901\" style=\"width: 100%; padding: 10px; background: var(--bg-panel); color: var(--text-primary); border: 1px solid var(--border); border-radius: 6px; font-family: monospace;\">\n            <\/div>\n<div>\n                <label style=\"color: var(--text-secondary); display: block; font-size: 0.85rem; margin-bottom: 6px;\">Zeitraum:<\/label><br \/>\n                <select id=\"ga4-date-range\" style=\"width: 100%; padding: 10px; background: var(--bg-panel); color: var(--text-primary); border: 1px solid var(--border); border-radius: 6px;\"><option value=\"7daysAgo\">Letzte 7 Tage<\/option><option value=\"30daysAgo\" selected>Letzte 30 Tage (Standard)<\/option><option value=\"90daysAgo\">Letzte 90 Tage<\/option><\/select>\n            <\/div>\n<\/p><\/div>\n<div style=\"display: flex; justify-content: flex-end;\">\n            <button id=\"run-pii-scan-btn\" class=\"button\" style=\"background: var(--accent); color: var(--on-accent); border: none; padding: 11px 26px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Seitenberichte auf PII pr\u00fcfen<\/button>\n        <\/div>\n<\/p><\/div>\n<p>    <!-- SCAN STATUS \/ PROGRESS --><\/p>\n<div data-mp-mask id=\"scan-summary-bar\" style=\"margin-bottom: 20px;\"><\/div>\n<p>    <!-- PII VIOLATIONS RESULTS --><\/p>\n<div data-mp-mask id=\"pii-results-container\"><\/div>\n<\/div>\n<p><script>\n(() => {\n    let accessToken = null;\n    let tokenClient = null;<\/p>\n<p>    const authBtn = document.getElementById(\"ga4-auth-btn\");\n    const authStatus = document.getElementById(\"ga4-auth-status\");\n    const configPanel = document.getElementById(\"ga4-config-panel\");\n    const runScanBtn = document.getElementById(\"run-pii-scan-btn\");\n    const summaryBar = document.getElementById(\"scan-summary-bar\");\n    const resultsContainer = document.getElementById(\"pii-results-container\");<\/p>\n<p>    const esc = (str) => String(str).replace(\/&\/g, \"&amp;\").replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\");<\/p>\n<p>    \/\/ 1. OAUTH 2.0 INITIALIZATION\n    authBtn.addEventListener(\"click\", () => {\n        const clientId = document.getElementById(\"ga4-client-id\").value.trim();\n        if (!clientId) {\n            alert(\"Bitte eine g\u00fcltige Google Cloud Client ID eingeben.\");\n            return;\n        }<\/p>\n<p>        if (!window.google || !google.accounts || !google.accounts.oauth2) {\n            alert(\"Das Skript von Google Identity Services wird noch geladen. Bitte in einem Moment erneut versuchen.\");\n            return;\n        }<\/p>\n<p>        tokenClient = google.accounts.oauth2.initTokenClient({\n            client_id: clientId,\n            scope: \"https:\/\/www.googleapis.com\/auth\/analytics.readonly\",\n            callback: (resp) => {\n                if (resp.error) {\n                    authStatus.innerHTML = \"Status: <strong style='color:#ff6b6b;'>Authentifizierungsfehler: \" + esc(resp.error) + \"<\/strong>\";\n                    return;\n                }\n                accessToken = resp.access_token;\n                authStatus.innerHTML = \"Status: <strong style='color:#51cf66;'>Verbunden (Analytics, nur Lesezugriff)<\/strong>\";\n                configPanel.style.display = \"block\";\n            }\n        });\n        tokenClient.requestAccessToken();\n    });<\/p>\n<p>    \/\/ 2. PII DETECTION ENGINE\n    const scanUrlForPII = (urlStr) => {\n        const findings = [];\n        let urlObj;\n        try {\n            urlObj = new URL(urlStr.startsWith(\"http\") ? urlStr : \"https:\/\/\" + urlStr);\n        } catch (e) {\n            return findings;\n        }<\/p>\n<p>        const params = urlObj.searchParams;\n        const emailRegex = \/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})\/i;\n        const phoneRegex = \/(?:\\+|00)?\\d{9,15}\/;\n        const uuidRegex = \/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\/i;\n        const idKeys = [\"user_id\", \"userid\", \"uid\", \"customer_id\", \"client_id\", \"pesel\", \"nip\", \"token\", \"session_id\", \"email\", \"mail\", \"phone\", \"tel\"];<\/p>\n<p>        params.forEach((value, key) => {\n            const lowKey = key.toLowerCase();\n            const cleanVal = decodeURIComponent(value).trim();<\/p>\n<p>            \/\/ Test Email\n            if (emailRegex.test(cleanVal) || (lowKey.includes(\"email\") && cleanVal.includes(\"@\"))) {\n                findings.push({ type: \"EMAIL\", paramKey: key, paramValue: cleanVal });\n                return;\n            }<\/p>\n<p>            \/\/ Test Phone\n            if ((lowKey.includes(\"phone\") || lowKey.includes(\"tel\") || lowKey.includes(\"kom\")) && phoneRegex.test(cleanVal.replace(\/[\\s.-]\/g, \"\"))) {\n                findings.push({ type: \"PHONE\", paramKey: key, paramValue: cleanVal });\n                return;\n            }<\/p>\n<p>            \/\/ Test Unique Identifier\n            if (idKeys.some(k => lowKey === k) || uuidRegex.test(cleanVal)) {\n                if (cleanVal.length > 3 && cleanVal !== \"null\" && cleanVal !== \"undefined\" && cleanVal !== \"true\" && cleanVal !== \"false\") {\n                    findings.push({ type: \"UNIQUE IDENTIFIER\", paramKey: key, paramValue: cleanVal });\n                }\n            }\n        });<\/p>\n<p>        return findings;\n    };<\/p>\n<p>    \/\/ Schl\u00fcssel bleiben englisch (sie steuern die Farbzuordnung), nur die Anzeige ist \u00fcbersetzt.\n    const TYPE_LABELS = {\n        \"EMAIL\": \"E-MAIL\",\n        \"PHONE\": \"TELEFON\",\n        \"UNIQUE IDENTIFIER\": \"EINDEUTIGE KENNUNG\"\n    };<\/p>\n<p>    const getBadge = (type) => {\n        const colors = {\n            \"EMAIL\": { bg: \"#471a1a\", color: \"#ff6b6b\" },\n            \"PHONE\": { bg: \"#4b3a1a\", color: \"#ff922b\" },\n            \"UNIQUE IDENTIFIER\": { bg: \"#2a1a4b\", color: \"#cc5de8\" }\n        };\n        const c = colors[type] || { bg: \"#242b30\", color: \"#ffffff\" };\n        const label = TYPE_LABELS[type] || type;\n        return \"<span style='background:\" + c.bg + \"; color:\" + c.color + \"; padding:4px 10px; border-radius:4px; font-size:0.75rem; font-weight:700; text-transform:uppercase;'>\" + label + \"<\/span>\";\n    };<\/p>\n<p>    \/\/ 3. GA4 DATA API RUN REPORT\n    runScanBtn.addEventListener(\"click\", async () => {\n        const propertyId = document.getElementById(\"ga4-property-id\").value.trim().replace(\/^properties\\\/\/i, \"\");\n        const dateRange = document.getElementById(\"ga4-date-range\").value;<\/p>\n<p>        if (!propertyId || isNaN(propertyId)) {\n            alert(\"Bitte eine g\u00fcltige numerische GA4 Property ID eingeben (z. B. 345678901).\");\n            return;\n        }<\/p>\n<p>        runScanBtn.disabled = true;\n        runScanBtn.textContent = \"GA4-URLs werden gepr\u00fcft ...\";\n        summaryBar.innerHTML = \"\";\n        resultsContainer.innerHTML = \"\";<\/p>\n<p>        try {\n            const response = await fetch(\"https:\/\/analyticsdata.googleapis.com\/v1beta\/properties\/\" + propertyId + \":runReport\", {\n                method: \"POST\",\n                headers: {\n                    \"Authorization\": \"Bearer \" + accessToken,\n                    \"Content-Type\": \"application\/json\"\n                },\n                body: JSON.stringify({\n                    dateRanges: [{ startDate: dateRange, endDate: \"today\" }],\n                    dimensions: [{ name: \"pageLocation\" }],\n                    metrics: [{ name: \"screenPageViews\" }],\n                    limit: 10000\n                })\n            });<\/p>\n<p>            if (!response.ok) {\n                const errJson = await response.json().catch(() => ({}));\n                const errMsg = errJson.error ? errJson.error.message : response.statusText;\n                throw new Error(errMsg);\n            }<\/p>\n<p>            const data = await response.json();\n            const rows = data.rows || [];\n            const totalUrlsChecked = rows.length;<\/p>\n<p>            const violations = [];<\/p>\n<p>            rows.forEach(row => {\n                const url = row.dimensionValues[0].value;\n                const pageviews = Number(row.metricValues[0].value || 0);\n                const detectedPII = scanUrlForPII(url);<\/p>\n<p>                if (detectedPII.length > 0) {\n                    violations.push({\n                        url: url,\n                        pageviews: pageviews,\n                        findings: detectedPII\n                    });\n                }\n            });<\/p>\n<p>            \/\/ 4. RENDER SUMMARY & VIOLATIONS\n            summaryBar.innerHTML = [\n                \"<\/p>\n<div style='background:var(--bg-body); padding:16px 20px; border-radius:8px; border:1px solid var(--border); display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:15px;'>\",\n                \"  <\/p>\n<div>\",\n                \"    <span style='color:var(--text-secondary); font-size:0.85rem; display:block;'>Gepr\u00fcfte GA4-URLs insgesamt<\/span>\",\n                \"    <strong style='color:var(--accent); font-size:1.4rem;'>\" + totalUrlsChecked.toLocaleString() + \" Seiten<\/strong>\",\n                \"  <\/div>\n<p>\",\n                \"  <\/p>\n<div>\",\n                \"    <span style='color:var(--text-secondary); font-size:0.85rem; display:block;'>Erkannte PII-Verst\u00f6\u00dfe<\/span>\",\n                \"    <strong style='color:\" + (violations.length > 0 ? \"#ff6b6b\" : \"#51cf66\") + \"; font-size:1.4rem;'>\" + violations.length.toLocaleString() + \" URLs<\/strong>\",\n                \"  <\/div>\n<p>\",\n                \"  <\/p>\n<div>\",\n                \"    <span style='color:var(--text-secondary); font-size:0.85rem; display:block;'>Zeitraum<\/span>\",\n                \"    <strong style='color:var(--text-primary); font-size:1rem;'>\" + dateRange + \" &rarr; today<\/strong>\",\n                \"  <\/div>\n<p>\",\n                \"<\/p><\/div>\n<p>\"\n            ].join(\"\");<\/p>\n<p>            if (violations.length === 0) {\n                resultsContainer.innerHTML = \"<\/p>\n<div style='background:var(--bg-body); padding:30px; border-radius:8px; border:1px solid var(--border); text-align:center; color:#51cf66; font-weight:bold; font-size:1.1rem;'>\u2714 Saubere Property: In allen \" + totalUrlsChecked + \" URLs wurde kein einziger PII-Versto\u00df gefunden!<\/div>\n<p>\";\n                return;\n            }<\/p>\n<p>            \/\/ Sort violations by highest screenPageViews\n            violations.sort((a, b) => b.pageviews - a.pageviews);<\/p>\n<p>            const cardsHtml = violations.map(v => {\n                const findingsHtml = v.findings.map(f => [\n                    \"<\/p>\n<div style='background:#0b1114; border:1px solid var(--border); padding:10px 14px; border-radius:6px; margin-top:8px; display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:10px; font-family:monospace; font-size:0.85rem;'>\",\n                    \"  <\/p>\n<div>\",\n                    \"    <span style='color:var(--text-secondary);'>Parametername: <\/span><strong style='color:#ff922b;'>\" + esc(f.paramKey) + \"<\/strong>\",\n                    \"  <\/div>\n<p>\",\n                    \"  <\/p>\n<div>\",\n                    \"    <span style='color:var(--text-secondary);'>Erkannter Wert: <\/span><code style='color:#ff6b6b; background:rgba(255,107,107,0.1); padding:2px 6px; border-radius:4px;'>\" + esc(f.paramValue) + \"<\/code>\",\n                    \"  <\/div>\n<p>\",\n                    \"  <\/p>\n<div>\" + getBadge(f.type) + \"<\/div>\n<p>\",\n                    \"<\/p><\/div>\n<p>\"\n                ].join(\"\")).join(\"\");<\/p>\n<p>                return [\n                    \"<\/p>\n<div style='background:var(--bg-body); border:1px solid var(--border); border-radius:8px; padding:18px; margin-bottom:15px;'>\",\n                    \"  <\/p>\n<div style='display:flex; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; gap:10px; border-bottom:1px solid var(--border); padding-bottom:12px; margin-bottom:12px;'>\",\n                    \"    <\/p>\n<div style='word-break:break-all; flex:1; min-width:280px;'>\",\n                    \"      <strong style='color:var(--text-primary); font-family:monospace; font-size:0.9rem; line-height:1.4;'>\" + esc(v.url) + \"<\/strong>\",\n                    \"    <\/div>\n<p>\",\n                    \"    <\/p>\n<div style='white-space:nowrap; background:rgba(43,166,223,0.1); border:1px solid rgba(43,166,223,0.3); padding:4px 12px; border-radius:20px; font-size:0.8rem; color:var(--accent); font-weight:700;'>\",\n                    \"      \" + v.pageviews.toLocaleString() + \" Seitenaufrufe\",\n                    \"    <\/div>\n<p>\",\n                    \"  <\/p><\/div>\n<p>\",\n                    \"  <\/p>\n<div style='color:var(--text-secondary); font-size:0.85rem; font-weight:600;'>Erkannte PII-Parameter:<\/div>\n<p>\",\n                    \"  \" + findingsHtml,\n                    \"<\/p><\/div>\n<p>\"\n                ].join(\"\");\n            }).join(\"\");<\/p>\n<p>            resultsContainer.innerHTML = [\n                \"<\/p>\n<h3 style='color:var(--text-primary); margin-bottom:15px; font-size:1.15rem;'>Aufschl\u00fcsselung der PII-Verst\u00f6\u00dfe (\" + violations.length + \")<\/h3>\n<p>\",\n                cardsHtml\n            ].join(\"\");<\/p>\n<p>        } catch (e) {\n            resultsContainer.innerHTML = \"<\/p>\n<div style='background:var(--bg-body); padding:25px; border-radius:8px; border:1px solid #ff6b6b; color:#ff6b6b; font-weight:bold;'>API-Fehler: \" + esc(e.message) + \"<\/div>\n<p>\";\n        } finally {\n            runScanBtn.disabled = false;\n            runScanBtn.textContent = \"Seitenberichte auf PII pr\u00fcfen\";\n        }\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Verbindet sich per OAuth 2.0 mit der Google Analytics Data API v1 und durchsucht die Seitenberichte einer GA4-Property nach personenbezogenen Daten in URL-Parametern.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9283,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92265,92091],"class_list":["post-9315","page","type-page","status-publish","hentry","tag-prywatnosc-danych-pl-de","tag-google-analytics-4-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GA4 PII Checker - 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\/de\/werkzeuge\/ga4-pii-checker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GA4 PII Checker - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Verbindet sich per OAuth 2.0 mit der Google Analytics Data API v1 und durchsucht die Seitenberichte einer GA4-Property nach personenbezogenen Daten in URL-Parametern.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-pii-checker\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-28T14:15:02+00:00\" \/>\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\\\/de\\\/werkzeuge\\\/ga4-pii-checker\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/ga4-pii-checker\\\/\",\"name\":\"GA4 PII Checker - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-09T13:37:24+00:00\",\"dateModified\":\"2026-08-28T14:15:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/ga4-pii-checker\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/ga4-pii-checker\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/ga4-pii-checker\\\/#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\\\/toolbox-2\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"GA4 PII Checker\"}]},{\"@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":"GA4 PII Checker - 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\/de\/werkzeuge\/ga4-pii-checker\/","og_locale":"en_US","og_type":"article","og_title":"GA4 PII Checker - Lukas Wojcik - Blog","og_description":"Verbindet sich per OAuth 2.0 mit der Google Analytics Data API v1 und durchsucht die Seitenberichte einer GA4-Property nach personenbezogenen Daten in URL-Parametern.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-pii-checker\/","og_site_name":"Lukas Wojcik - Blog","article_modified_time":"2026-08-28T14:15:02+00:00","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\/de\/werkzeuge\/ga4-pii-checker\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-pii-checker\/","name":"GA4 PII Checker - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-09T13:37:24+00:00","dateModified":"2026-08-28T14:15:02+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-pii-checker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-pii-checker\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-pii-checker\/#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\/toolbox-2\/"},{"@type":"ListItem","position":3,"name":"GA4 PII Checker"}]},{"@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\/pages\/9315","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=9315"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9315\/revisions"}],"predecessor-version":[{"id":13088,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9315\/revisions\/13088"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9283"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=9315"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=9315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}