{"id":451,"date":"2026-09-08T15:45:00","date_gmt":"2026-09-08T13:45:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/?p=451"},"modified":"2026-10-24T02:25:45","modified_gmt":"2026-10-24T00:25:45","slug":"automatisierte-ga4-meta-capi-event-validierung-in-bigquery","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/","title":{"rendered":"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery"},"content":{"rendered":"<p>Ein Abgleich zwischen GA4 und Meta CAPI zeigt, welche erwarteten Gesch\u00e4ftsvorg\u00e4nge in den jeweiligen Datenquellen nachweisbar sind. Eine Abweichung erkl\u00e4rt aber noch nicht die Ursache: Einwilligung, unterschiedliche Ereignisdefinitionen, versp\u00e4tete Verarbeitung und technische Fehler k\u00f6nnen dasselbe Muster erzeugen. GA4 ist zudem nicht automatisch ein reiner Browserdatenstrom.<\/p>\n<h2>1. Erst festlegen, was \u00fcberhaupt \u00fcbereinstimmen soll<\/h2>\n<p>Die Grundlage ist eine verl\u00e4ssliche Liste der Gesch\u00e4ftsvorg\u00e4nge, etwa best\u00e4tigter Bestellungen. Ein Vergleich nur zwischen zwei Tracking-Tabellen \u00fcbersieht Vorg\u00e4nge, die in beiden fehlen. Auch die Referenzliste ben\u00f6tigt eine eigene Vollst\u00e4ndigkeitskontrolle.<\/p>\n<p>Ein stabiler Schl\u00fcssel verbindet die Quellen. UUIDv4 ist eine M\u00f6glichkeit, keine Pflicht und kein Verschl\u00fcsselungsverfahren. Derselbe Vorgang beh\u00e4lt bei Wiederholungen dieselbe Kennung. Unterschiedliche Vorg\u00e4nge erhalten unterschiedliche Kennungen. Ein zus\u00e4tzlicher Geltungsbereich verhindert Kollisionen zwischen Shops oder Datenquellen.<\/p>\n<p>Die Ereignisnamen brauchen eine ausdr\u00fcckliche Zuordnung, zum Beispiel GA4 <code>purchase<\/code> und Meta <code>Purchase<\/code> zum gemeinsamen Typ <code>purchase<\/code>. Die GA4-Bestellkennung <code>transaction_id<\/code>, ein eigener Abgleichparameter und Metas <code>event_id<\/code> sind verschiedene Felder. GA4-Kaufdubletten und Meta-Pixel\/CAPI-Deduplizierung folgen jeweils eigenen Regeln. Ein BigQuery-Treffer beweist keine Werbezuordnung und keine erfolgreiche Deduplizierung bei Meta.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-450-reconciliation-20261024-de.png\" alt=\"Eine eigene Referenzliste macht auch beidseitig fehlende Nachweise sichtbar. Versandversuche werden vor dem Vergleich zusammengefasst.\" width=\"1120\" height=\"580\" loading=\"lazy\"><figcaption>Eine eigene Referenzliste macht auch beidseitig fehlende Nachweise sichtbar. Versandversuche werden vor dem Vergleich zusammengefasst.<\/figcaption><\/figure>\n<h2>2. Drei vorbereitete Tabellen statt ungepr\u00fcfter Rohdaten<\/h2>\n<p>Das folgende Beispiel setzt eigene Tabellen voraus. Die Tabellen entstehen nicht automatisch durch die Verkn\u00fcpfung mit GA4; Einleseprozesse und Qualit\u00e4tspr\u00fcfungen m\u00fcssen zuerst eingerichtet werden.<\/p>\n<ul>\n<li><code>expected_events<\/code>: genau eine Zeile je <code>scope_id<\/code>, <code>event_kind<\/code> und <code>event_id<\/code>; dazu <code>business_time<\/code> als tats\u00e4chlicher Gesch\u00e4ftszeitpunkt sowie <code>expected_ga4<\/code> und <code>expected_meta<\/code> als BOOL. TRUE bedeutet, dass eine identifizierbare \u00dcbermittlung f\u00fcr diesen Dienst vorgesehen und zul\u00e4ssig ist; FALSE bedeutet nicht erwartet; NULL bedeutet ungekl\u00e4rt.<\/li>\n<li><code>ga4_observations<\/code>: eine Zeile je tats\u00e4chlich exportiertem Ereignis, mit demselben zusammengesetzten Schl\u00fcssel und <code>loaded_at<\/code> als Einlesezeitpunkt. Eine erneute Einlesung derselben Exportzeile darf keine zus\u00e4tzliche Beobachtung erzeugen. Tats\u00e4chlich mehrfach aufgezeichnete Ereignisse bleiben dagegen sichtbar.<\/li>\n<li><code>capi_attempts<\/code>: eine Zeile je Versandversuch und zugeh\u00f6rigem Ereignis, mit Schl\u00fcssel, <code>loaded_at<\/code> und <code>receipt_state<\/code>. Zul\u00e4ssige Zust\u00e4nde sind <code>received<\/code>, <code>rejected<\/code> und <code>unknown<\/code>. Nur ein eindeutig zuordenbarer Empfangsnachweis erh\u00e4lt <code>received<\/code>.<\/li>\n<\/ul>\n<p>HTTP 200 allein ist kein Attributionsnachweis. Bei einer Antwort mit Empfangsanzahl muss auch die Zuordnung zur Anfrage stimmen. Eine unklare oder teilweise Batch-Antwort darf nicht pauschal jedes Ereignis als empfangen markieren. Fehler und unklare Versuche bleiben im Protokoll; sp\u00e4tere erfolgreiche Wiederholungen werden zus\u00e4tzlich erfasst. Zugriffstoken und vollst\u00e4ndige Kundendaten geh\u00f6ren nicht in dieses Pr\u00fcfprotokoll.<\/p>\n<p>Leere Kennungen, doppelte Parameterwerte, unbekannte Ereignisnamen und Beobachtungen ohne Referenzvorgang ben\u00f6tigen eigene Fehlerlisten. Ung\u00fcltige Datens\u00e4tze d\u00fcrfen nicht still verschwinden. <code>scope_id<\/code> umfasst die feste Zuordnung zwischen Shop, GA4-Property beziehungsweise Stream und Meta-Datenquelle.<\/p>\n<h2>3. Den Gesch\u00e4ftstag auswerten und Wiederholungen zusammenfassen<\/h2>\n<p>Die Abfrage bewertet beispielhaft einen vier Tage zur\u00fcckliegenden UTC-Gesch\u00e4ftstag. Das schafft Abstand zu normalen Nachl\u00e4ufen, garantiert aber keine Vollst\u00e4ndigkeit. Vor dem Lauf m\u00fcssen Export, Referenzliste und CAPI-Protokoll ausreichend aktuell sein. Fehlende Tabellen sind ein Ladefehler, kein Beweis f\u00fcr null Ereignisse.<\/p>\n<p>GA4-Tagestabellen richten sich nach der Property-Zeitzone. Die Dokumentation beschreibt <code>event_timestamp<\/code> als Empfangszeitpunkt; \u00dcbertragung und Gesch\u00e4ftsvorgang k\u00f6nnen auseinanderliegen. Deshalb stammt der bewertete Tag hier aus <code>business_time<\/code>. Die vorbereiteten Beobachtungstabellen m\u00fcssen passende sp\u00e4tere Eing\u00e4nge enthalten. Nur die t\u00e4gliche GA4-Tabelle des Gesch\u00e4ftstags einzulesen reicht daf\u00fcr nicht generell.<\/p>\n<pre class=\"wp-block-code-beautifier-block-code\"><code>-- GoogleSQL. Prepared tables are defined in the article.\n-- @run_time is supplied by BigQuery Scheduled Queries.\nDECLARE target_day DATE DEFAULT DATE_SUB(DATE(@run_time, &#x27;UTC&#x27;), INTERVAL 4 DAY);\nDECLARE observed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP();\n\nCREATE TEMP TABLE expected AS\nSELECT scope_id, event_kind, event_id, expected_ga4, expected_meta\nFROM `project_id.monitoring.expected_events`\nWHERE business_time &gt;= TIMESTAMP(target_day, &#x27;UTC&#x27;)\n  AND business_time &lt; TIMESTAMP(DATE_ADD(target_day, INTERVAL 1 DAY), &#x27;UTC&#x27;);\n\nASSERT (\n  SELECT COUNT(*) = 0 FROM expected\n  WHERE scope_id IS NULL OR TRIM(scope_id) = &#x27;&#x27;\n     OR event_kind IS NULL OR TRIM(event_kind) = &#x27;&#x27;\n     OR event_id IS NULL OR TRIM(event_id) = &#x27;&#x27;\n) AS &#x27;Invalid key in expected events&#x27;;\n\nASSERT NOT EXISTS (\n  SELECT 1 FROM expected\n  GROUP BY scope_id, event_kind, event_id\n  HAVING COUNT(*) &gt; 1\n) AS &#x27;Duplicate business-event key&#x27;;\n\nCREATE TEMP TABLE result AS\nWITH ga4 AS (\n  SELECT g.scope_id, g.event_kind, g.event_id, COUNT(*) AS ga4_rows\n  FROM `project_id.monitoring.ga4_observations` g\n  JOIN expected e USING (scope_id, event_kind, event_id)\n  WHERE g.loaded_at &lt;= observed_at\n  GROUP BY g.scope_id, g.event_kind, g.event_id\n),\ncapi AS (\n  SELECT c.scope_id, c.event_kind, c.event_id,\n         COUNT(*) AS capi_attempts,\n         COUNTIF(c.receipt_state = &#x27;received&#x27;) AS capi_receipts,\n         COUNTIF(c.receipt_state = &#x27;unknown&#x27;) AS capi_unknown\n  FROM `project_id.monitoring.capi_attempts` c\n  JOIN expected e USING (scope_id, event_kind, event_id)\n  WHERE c.loaded_at &lt;= observed_at\n  GROUP BY c.scope_id, c.event_kind, c.event_id\n)\nSELECT target_day AS business_day, observed_at AS checked_at, e.*,\n       COALESCE(g.ga4_rows, 0) AS ga4_rows,\n       COALESCE(c.capi_attempts, 0) AS capi_attempts,\n       COALESCE(c.capi_receipts, 0) AS capi_receipts,\n       COALESCE(c.capi_unknown, 0) AS capi_unknown\nFROM expected e\nLEFT JOIN ga4 g USING (scope_id, event_kind, event_id)\nLEFT JOIN capi c USING (scope_id, event_kind, event_id);\n\nSELECT *,\n  CASE\n    WHEN expected_ga4 IS NULL OR expected_meta IS NULL THEN &#x27;SCOPE_UNKNOWN&#x27;\n    WHEN NOT expected_ga4 OR NOT expected_meta THEN &#x27;OUTSIDE_JOINT_SCOPE&#x27;\n    WHEN ga4_rows &gt; 0 AND capi_receipts &gt; 0 THEN &#x27;OBSERVED_BOTH&#x27;\n    WHEN ga4_rows = 0 AND capi_receipts = 0 THEN &#x27;UNCONFIRMED_BOTH&#x27;\n    WHEN ga4_rows = 0 THEN &#x27;UNCONFIRMED_GA4&#x27;\n    ELSE &#x27;UNCONFIRMED_CAPI&#x27;\n  END AS reconciliation_status,\n  ga4_rows &gt; 1 AS repeated_ga4_rows,\n  (expected_ga4 = FALSE AND ga4_rows &gt; 0)\n    OR (expected_meta = FALSE AND capi_attempts &gt; 0) AS unexpected_transmission\nFROM result;<\/code><\/pre>\n<p>Die Gruppierung verhindert, dass zwei GA4-Zeilen und drei CAPI-Versuche sechs vermeintliche Vorg\u00e4nge erzeugen. Wiederholungen bleiben als Anzahl sichtbar. <code>UNCONFIRMED<\/code> bedeutet fehlenden Nachweis im betrachteten Datenbestand, nicht automatisch einen defekten Tag. <code>unexpected_transmission<\/code> kennzeichnet au\u00dferdem \u00dcbermittlungen, die laut Referenz nicht vorgesehen waren.<\/p>\n<p>Das Beispiel ist kein vollst\u00e4ndiger Einleseprozess. Tabellenzugriffe m\u00fcssen passend partitioniert oder begrenzt, Berechtigungen eingerichtet und Kosten vorab gepr\u00fcft werden. Ergebnisse mit Gesch\u00e4ftstag und Pr\u00fcfzeit speichern; erneute Auswertungen d\u00fcrfen \u00e4ltere Tagesst\u00e4nde gezielt ersetzen, statt die Fehlerquote durch angeh\u00e4ngte Doppelzeilen zu ver\u00e4ndern.<\/p>\n<h2>4. Einen Befund alarmieren, nicht nur einen erfolgreichen SQL-Lauf<\/h2>\n<p>Eine nachgelagerte Ansicht <code>latest_reconciliation<\/code> enth\u00e4lt genau den j\u00fcngsten erfolgreich berechneten Stand je Gesch\u00e4ftstag und Schl\u00fcssel. Die folgende separate Abfrage liefert nur Tage oberhalb eines beispielhaften Schwellenwerts. Die Mindestmenge von 100 und die Grenze von f\u00fcnf Prozent sind zu begr\u00fcnden, keine allgemein g\u00fcltigen Qualit\u00e4tsnormen.<\/p>\n<pre class=\"wp-block-code-beautifier-block-code\"><code>-- A separate scheduled SELECT over the latest successful snapshot.\nWITH counts AS (\n  SELECT business_day,\n    COUNTIF(expected_ga4 AND expected_meta) AS comparable,\n    COUNTIF(expected_ga4 AND expected_meta\n            AND (ga4_rows = 0 OR capi_receipts = 0)) AS unconfirmed\n  FROM `project_id.monitoring.latest_reconciliation`\n  GROUP BY business_day\n),\nrates AS (\n  SELECT *, 100 * SAFE_DIVIDE(unconfirmed, comparable) AS rate_pct\n  FROM counts\n)\nSELECT *\nFROM rates\nWHERE comparable &gt;= 100 AND rate_pct &gt; 5;<\/code><\/pre>\n<p>Bei einer leeren Vergleichsmenge bleibt die Quote mit <code>SAFE_DIVIDE<\/code> unbekannt. F\u00e4lle au\u00dferhalb des gemeinsamen Umfangs und ungekl\u00e4rte Erwartungen z\u00e4hlen nicht in diesen Nenner. Eigene Kontrollen m\u00fcssen solche F\u00e4lle, unerwartete \u00dcbermittlungen, ung\u00fcltige IDs, Wiederholungen und unvollst\u00e4ndige Datenzufl\u00fcsse \u00fcberwachen.<\/p>\n<p>Die Scheduled-Query-Metrik <code>last_execution_job_rows<\/code> z\u00e4hlt Ergebniszeilen, nicht den Wert von <code>rate_pct<\/code>. F\u00fcr die reine Alarmabfrage kann eine gefilterte Monitoring-Regel mit Zeilenzahl gr\u00f6\u00dfer null verwendet werden. Der letzte Wert kann bei einem fehlgeschlagenen oder abgeschalteten Auftrag weiter bestehen bleiben. Deshalb sind Ausf\u00fchrungsfehler und Aktualit\u00e4t separat zu \u00fcberwachen; ein dauerhaft gespeicherter alter Alarm ist kein neuer Tagesbefund.<\/p>\n<div class=\"lw-faq\">\n<h2>Fragen und Antworten<\/h2>\n<h3>Ist eine benutzerdefinierte GA4-Dimension f\u00fcr die Abgleich-ID n\u00f6tig?<\/h3>\n<p>F\u00fcr den Zugriff auf einen tats\u00e4chlich exportierten Parameter in <code>event_params<\/code> nicht. Registrierung garantiert jedoch weder \u00dcbertragung noch Export. Fehlende oder mehrfach vorhandene Schl\u00fcssel m\u00fcssen beim Einlesen erkannt werden.<\/p>\n<h3>Reichen 48 Stunden und ein Lauf um 06:00 UTC?<\/h3>\n<p>Nein. GA4 kann Tagestabellen \u00fcber mehrere Kalendertage erg\u00e4nzen und gelegentlich historische Daten neu verarbeiten. Auch CAPI-Versand und das eigene Protokoll haben eigene Verz\u00f6gerungen. Wartezeit, Aktualit\u00e4tspr\u00fcfung und erneute Auswertung \u00e4lterer Tage geh\u00f6ren zusammen; eine feste Uhrzeit garantiert keinen abgeschlossenen Export.<\/p>\n<h3>Ersetzt ads_storage die Pr\u00fcfung der Meta-Einwilligung?<\/h3>\n<p>Nein. <code>Yes<\/code>, <code>No<\/code>, <code>Unset<\/code> und ein fehlender Wert beschreiben nicht automatisch die Erlaubnis f\u00fcr einen anderen Dienst. Die Erwartungen m\u00fcssen aus der tats\u00e4chlich geltenden, dokumentierten Dienstkonfiguration und Entscheidung entstehen. Ein bewusst nicht gesendetes Ereignis ist keine technische St\u00f6rung; ein unbekannter Zustand ist keine Zustimmung.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>Quellen<\/h2>\n<ul>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/7029846?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">GA4 BigQuery export schema<\/a><\/li>\n<li><a href=\"https:\/\/developers.facebook.com\/documentation\/ads-commerce\/conversions-api\/using-the-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">Meta Conversions API: using the API<\/a><\/li>\n<li><a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/create-alert-scheduled-query\" target=\"_blank\" rel=\"noopener noreferrer\">BigQuery: alerts with scheduled queries<\/a><\/li>\n<\/ul>\n<\/div>\n<p><!-- lw-analytics-reconcile-guide:start --><\/p>\n<h2>Praxiskontrolle: Bestellungen mit dem Shop-Export abgleichen<\/h2>\n<p>Das Werkzeug <a href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/shop-ga4-revenue-reconciliation\/\">Shop-Umsatz und GA4 abgleichen<\/a> vergleicht zwei CSV-Dateien lokal. Die Bestell-ID bildet den gemeinsamen Schl\u00fcssel. Namen, E-Mail-Adressen und Anschriften sind nicht n\u00f6tig: Bestell-ID, Betrag und W\u00e4hrung gen\u00fcgen. Eine Bestell-ID ist dadurch nicht automatisch anonym.<\/p>\n<ol>\n<li>Beide Exporte f\u00fcr denselben Zeitraum und dieselbe Zeitzone vorbereiten. Steuern, Versand und Erstattungen m\u00fcssen gleich behandelt werden. Artikelpositionen und Erstattungen vorab zu einem vereinbarten Betrag je Bestellung zusammenfassen.<\/li>\n<li>Trennzeichen und Dezimalzeichen je Datei w\u00e4hlen, Datei laden und die Spalten f\u00fcr Bestell-ID, Betrag und W\u00e4hrung zuordnen. Kennungen mit f\u00fchrenden Nullen bleiben Text.<\/li>\n<li>Nachkommastellen und eine ausdr\u00fcckliche Toleranz je Bestellung w\u00e4hlen. Es findet keine W\u00e4hrungsumrechnung statt.<\/li>\n<li>Die getrennten Gruppen pr\u00fcfen: auf einer Seite fehlend, doppelte ID, andere W\u00e4hrung und Betrag au\u00dferhalb der Toleranz.<\/li>\n<li>Ergebnis exportieren und einzelne Bestellungen in den Quellsystemen untersuchen.<\/li>\n<\/ol>\n<p>Doppelte IDs werden markiert statt addiert: Ein mehrfach gesendetes Kaufereignis, ein Export auf Artikelebene und eine Erstattungszeile erfordern unterschiedliche Deutungen. Negative Betr\u00e4ge werden als Zahlen akzeptiert; die fachliche Definition muss dennoch zwischen den Dateien \u00fcbereinstimmen. Eine fehlende Analytics-Bestellung kann mit Einwilligung, Zeitpunkt, Filtern oder Erfassungsfehlern zusammenh\u00e4ngen und beweist allein keinen defekten Tag. Auch eine Differenz von null belegt nicht, dass alle Bestellungen exportiert wurden. Das Werkzeug addiert keine Gesamtsummen \u00fcber unterschiedliche W\u00e4hrungen.<\/p>\n<p>Ma\u00dfgeblich sind der gew\u00e4hlte Export und die <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/ecommerce\" target=\"_blank\" rel=\"noopener noreferrer\">GA4-E-Commerce-Dokumentation<\/a>. Das <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\/api-schema\" target=\"_blank\" rel=\"noopener noreferrer\">Data-API-Schema<\/a> unterscheidet Transaktions-IDs und Umsatzkennzahlen; eine allgemeine Gesamtumsatzspalte ist nicht automatisch mit dem Bestellbetrag eines Shops gleichzusetzen.<\/p>\n<p><!-- lw-analytics-reconcile-guide:end --><\/p>\n<p><!-- lw-revenue-export-guide:start --><\/p>\n<h2>Die Analytics-CSV mit BigQuery vorbereiten<\/h2>\n<p>Der <a href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/shop-ga4-revenue-reconciliation\/#aw-export-helper\">Exporthelfer im Umsatzabgleich<\/a> erzeugt eine Kaufabfrage f\u00fcr einen vorhandenen t\u00e4glichen GA4-Export. Projekt, Datensatz, Zeitraum und Rundungspr\u00e4zision werden lokal eingegeben. Die Seite f\u00fchrt das SQL nicht aus und fordert keinen BigQuery-Zugriff an.<\/p>\n<p>Die Ergebnisspalten <code>transaction_id<\/code>, <code>amount<\/code> und <code>currency<\/code> passen zu den Vergleichsfeldern. Jeder erfasste Kauf bleibt eine Zeile. Eine zus\u00e4tzliche Kaufereignis-Anzahl hilft beim Erkennen wiederholter Bestell-IDs; diese werden weder still addiert noch entfernt. Fehlende Betr\u00e4ge werden nicht durch null ersetzt.<\/p>\n<ol>\n<li>Vor dem Shop-Export die Definition des Kaufbetrags und die Tagesgrenzen abstimmen. Diese Abfrage schlie\u00dft Erstattungen aus und addiert Steuer oder Versand nicht separat.<\/li>\n<li>SQL erzeugen, in BigQuery validieren und die Kostensch\u00e4tzung ansehen. Vor der Ausf\u00fchrung eine Obergrenze f\u00fcr abrechenbare Bytes festlegen.<\/li>\n<li>Das vollst\u00e4ndige Ergebnis als lokale CSV speichern. Im Vergleich Komma als Feldtrenner, Dezimalpunkt und dieselben Nachkommastellen wie in der Abfrage w\u00e4hlen.<\/li>\n<li>Wiederholte IDs und fehlende Felder vor der Interpretation von Betragsabweichungen untersuchen. Der Vergleich akzeptiert bis zu 20.000 Datenzeilen je Datei. Kennungen in Tabellenprogrammen als Text behandeln.<\/li>\n<\/ol>\n<p>Zwei herunterladbare, erfundene CSV-Dateien erm\u00f6glichen einen nachvollziehbaren Einstieg mit je einem Fall in allen sechs Ergebnisgruppen. Die Beispieldateien sind unabh\u00e4ngig vom SQL und verwenden zwei Nachkommastellen bei null Toleranz.<\/p>\n<p>Quellen: <a href=\"https:\/\/support.google.com\/analytics\/answer\/7029846?hl=de\">GA4-Exportschema<\/a>, <a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/running-queries\">Abfragepr\u00fcfung und Kostenkontrolle<\/a> sowie <a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/export-file\">Abfrageergebnisse als CSV speichern<\/a>.<\/p>\n<p><!-- lw-revenue-export-guide:end --><br \/>\n<!-- lw-items-practice:start --><\/p>\n<h2>Praxispr\u00fcfung: das items-Array vor dem Senden kontrollieren<\/h2>\n<p>Ein E-Commerce-Ereignis kann erfolgreich ankommen, obwohl seine Produktdaten fehlerhaft sind. Der <a href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-ecommerce-item-array-validator\/\">GA4 E-Commerce Item Array Validator<\/a> pr\u00fcft das JSON-Array lokal und nennt das betroffene Feld, etwa <code>items[0].price<\/code>. Ein Preis in Anf\u00fchrungszeichen wie <code>\"12.50\"<\/code> erscheint als Typfehler und wird nicht stillschweigend umgewandelt.<\/p>\n<p>Die Pr\u00fcfung unterscheidet Fehler von Pr\u00fcfhinweisen. Wiederholte Artikel-IDs k\u00f6nnen Varianten bezeichnen und beweisen keine doppelten K\u00e4ufe. Ohne Preis ist keine vollst\u00e4ndige Wertsumme m\u00f6glich. Mengen von null bleiben null; fehlende Mengen werden mit eins gerechnet. Die Summe verwendet den bereits rabattierten Preis, ohne Steuern und Versand. W\u00e4hrung und Transaktionskennung auf Ereignisebene ben\u00f6tigen weiterhin eine eigene Pr\u00fcfung.<\/p>\n<p>Ein sinnvoller Ablauf verbindet die Array-Pr\u00fcfung mit der Kontrolle des tats\u00e4chlichen Netzwerkaufrufs und dem anschlie\u00dfenden Bestellabgleich. Eine bestandene Strukturpr\u00fcfung belegt allein noch keine korrekte Erfassung oder Berichterstattung. Grundlage sind <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/ecommerce\">Googles E-Commerce-Anleitung<\/a> und die <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/reference\/events#purchase\">purchase-Referenz<\/a>.<\/p>\n<p><!-- lw-items-practice:end --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine technische Schritt-f\u00fcr-Schritt-Anleitung zur Erstellung einer automatisierten Event-Validierungs- und Abgleichspipeline zwischen GA4 und der Meta Conversions API in BigQuery.<\/p>\n","protected":false},"author":1,"featured_media":14011,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[115],"tags":[92081,92023,92088,92091,92244,92032,92235],"class_list":["post-451","post","type-post","status-publish","format-standard","hentry","category-tutorials-de","tag-bigquery-de","tag-conversion-tracking-de","tag-data-quality-de","tag-google-analytics-4-de","tag-meta-conversions-api-de","tag-tracking-de","tag-tutorial-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"GA4 und Meta-CAPI-Events in BigQuery abgleichen: SQL-Pr\u00fcfungen, Alerts und Vergleich mit Shop-Bestellungen und Analytics-CSV.\" \/>\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\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"GA4 und Meta-CAPI-Events in BigQuery abgleichen: SQL-Pr\u00fcfungen, Alerts und Vergleich mit Shop-Bestellungen und Analytics-CSV.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-08T13:45:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-24T00:25:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-451-automatisierte-ga4-meta-capi-event-v-g.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=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery\",\"datePublished\":\"2026-09-08T13:45:00+00:00\",\"dateModified\":\"2026-10-24T00:25:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/\"},\"wordCount\":1563,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-451-automatisierte-ga4-meta-capi-event-v-g.png\",\"keywords\":[\"BigQuery\",\"Conversion Tracking\",\"Data Quality\",\"Google Analytics 4\",\"Meta Conversions API\",\"Tracking\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/\",\"name\":\"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-451-automatisierte-ga4-meta-capi-event-v-g.png\",\"datePublished\":\"2026-09-08T13:45:00+00:00\",\"dateModified\":\"2026-10-24T00:25:45+00:00\",\"description\":\"GA4 und Meta-CAPI-Events in BigQuery abgleichen: SQL-Pr\u00fcfungen, Alerts und Vergleich mit Shop-Bestellungen und Analytics-CSV.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-451-automatisierte-ga4-meta-capi-event-v-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-451-automatisierte-ga4-meta-capi-event-v-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Automatisierte GA4- & Meta-CAPI-Event-Validierung in BigQuery\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-analytics-de\\\/tutorials-de\\\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery\"}]},{\"@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":"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery | Lukas Wojcik","description":"GA4 und Meta-CAPI-Events in BigQuery abgleichen: SQL-Pr\u00fcfungen, Alerts und Vergleich mit Shop-Bestellungen und Analytics-CSV.","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\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/","og_locale":"en_US","og_type":"article","og_title":"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery | Lukas Wojcik","og_description":"GA4 und Meta-CAPI-Events in BigQuery abgleichen: SQL-Pr\u00fcfungen, Alerts und Vergleich mit Shop-Bestellungen und Analytics-CSV.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-08T13:45:00+00:00","article_modified_time":"2026-10-24T00:25:45+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-451-automatisierte-ga4-meta-capi-event-v-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery","datePublished":"2026-09-08T13:45:00+00:00","dateModified":"2026-10-24T00:25:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/"},"wordCount":1563,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-451-automatisierte-ga4-meta-capi-event-v-g.png","keywords":["BigQuery","Conversion Tracking","Data Quality","Google Analytics 4","Meta Conversions API","Tracking","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/","name":"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-451-automatisierte-ga4-meta-capi-event-v-g.png","datePublished":"2026-09-08T13:45:00+00:00","dateModified":"2026-10-24T00:25:45+00:00","description":"GA4 und Meta-CAPI-Events in BigQuery abgleichen: SQL-Pr\u00fcfungen, Alerts und Vergleich mit Shop-Bestellungen und Analytics-CSV.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-451-automatisierte-ga4-meta-capi-event-v-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-451-automatisierte-ga4-meta-capi-event-v-g.png","width":1200,"height":630,"caption":"Automatisierte GA4- & Meta-CAPI-Event-Validierung in BigQuery"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-analytics-de\/tutorials-de\/automatisierte-ga4-meta-capi-event-validierung-in-bigquery\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Automatisierte GA4- &amp; Meta-CAPI-Event-Validierung in BigQuery"}]},{"@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\/451","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=451"}],"version-history":[{"count":9,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/451\/revisions"}],"predecessor-version":[{"id":23167,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/451\/revisions\/23167"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/14011"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=451"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=451"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}