analytics
QUERY = 'contents'; CATEGORY = 'analytics' // 48 rows
An applied measurement
case, every week
Analytics and measurement, developer tools, AI & LLM integrations, server-side tracking: weekly real case analyses.
Reading URLs for Tracking: Gateway Design, ITP and Pixel Sandbox
How URL parts (scheme, host, path, query, fragment) impact tracking. Server-side gateway design, first-party context, Safari LTP and Safari 26 AFP, Shopify Custom Pixel sandbox pitfalls.
Advertising Measurement Within Consent Limits: Google's Signal Architecture
Which measurement signals still work, legally and ethically, when a user declines consent? Consent Mode V2 ping architecture, gcs/gcd parameters, wbraid/gbraid, modeled conversions and Enhanced Conversions.
Why Google Ads and GA4 Conversions Never Match: Counting Unit and Time Axis
Why does the conversion count in Google Ads differ from purchases in GA4? Six columns across two dashboards count the same order with different units and write it to different days. The two axes to align before any comparison.
Fractional Conversions in the Ads Dashboard: The Model or the Date Range?
What does a fractional value like 0.29 against a single order in Google Ads actually mean? DDA's credit distribution and the report date range side effect get conflated. The test that separates them, a measured total preservation at account level, and how the lookback window changes things.
Joining Google Ads and GA4 at Row Level: A Shared Key and a Two-Layer Reading
Instead of putting two dashboard totals side by side, join at row level on an identifier present in both. How the join key is chosen, the precondition in the Ads Webpages report, the three-bucket reading, and the measured ceiling of first-party cookie capture.
Connecting a Shopify Order to an Ad Click: Choosing a Join Key for Offline Conversions
The ad platform wants a click ID for offline conversion upload, but the Shopify order does not carry one. The cart attribute path only works going forward, so it cannot serve a backfill request. Using GA4 as a join table, the cart token naming trap, and the consent ceiling both paths share.
Are ChatGPT Ads a Measurable Channel? Preparing Before Access
ChatGPT ads are a measurable channel: the pixel, the Conversions API, and dedup together give a solid base. The real insight is that the measurement infrastructure can be built today, before access arrives in your market. The healthy setup I recommend (deployment via GTM and sGTM, consent with a CMP, cross-validation with GA4 and cookieless tools) already applies to every ad channel; when access lands, getting the ID from Ads Manager and starting is all that is left.
Common Value-Sending Mistakes in OpenAI Ads: Decimal or Minor Unit?
OpenAI Ads expects monetary value as an integer in ISO 4217 minor units: 2599 for $25.99. The most common mistake is sending a decimal, because Meta CAPI, GA4, and Google Ads gtag all use decimals (25.99). Other traps: mis-scaling zero-decimal currencies like JPY, sending amount without currency, and confusing the Google Ads API micros value.
OpenAI Ads Identity Matching and Privacy: SHA-256, oppref, and opt_out
OpenAI Ads uses the identity fields in the user object to bind a conversion to an ad interaction. Email and external ID are hashed with SHA-256 and sent as lowercase 64-character hexadecimal strings; raw email, external ID, and phone are never sent. This post explains identity matching, the hashing rules, and the oppref and opt_out fields.
The OpenAI Ads Event Taxonomy: Which Event When, With Which Data Shape
OpenAI Ads defines eleven standard events and four data shapes (contents, customer_action, plan_enrollment, custom). Each event is bound to a specific shape: order_created and checkout_started use contents, lead_created uses customer_action, subscription_created uses plan_enrollment. This reference lists when each event fires and the fields of each shape.
Dedup in OpenAI Ads: Not Counting the Same Conversion Twice
When the pixel and the Conversions API send the same conversion, double-counting happens. OpenAI Ads deduplicates it with three components: Pixel ID, event name, and event_id, keeping the pixel event_id equal to the server id. This guide shows how to generate a stable event_id, match on both sides, and the common mistakes.
Sending Server-Side Conversions with the Conversions API: An OpenAI Ads Guide
The OpenAI Ads Conversions API sends conversion events server-to-server: a POST to the bzr.openai.com/v1/events endpoint with your Pixel ID and API key. This guide shows the request structure, the event fields and their required rules, the batch behavior, testing with validate_only, and dedup with the pixel.
Setting Up the OpenAI Ads JavaScript Pixel: A Step-by-Step Guide
Setting up the OpenAI Ads pixel takes three steps: add the snippet to the head of every page, pass your Pixel ID with oaiq('init'), and call oaiq('measure') when a conversion happens. This guide shows the install snippet, the init and measure calls, standard and custom event examples, and the testing steps.
OpenAI Ads Measurement Architecture: How the Pixel and Conversions API Work Together
OpenAI Ads conversion measurement rests on two layers: the browser JavaScript pixel and the server-side Conversions API. This post explains what each layer captures, why both are needed, and how they reconcile the same conversion without double-counting, conceptually, without diving into setup steps.
Who Can Access ChatGPT Ads: Geographic Eligibility and Category Restrictions
ChatGPT ads (OpenAI Ads) are open as of June 2026 only to advertisers based in the US, Canada, Australia, and New Zealand. Türkiye is not yet eligible as an advertiser. The business location and category in the Ads Manager form determine eligibility; this post covers who can access it, which categories are excluded, and what can be done from a non-eligible region.