Conversion Measurement API



This proposal is fleshed out more in an explainer.

Currently, the web ad industry measures conversions via identifiers they can associate across sites. These identifiers tie information about which ads were clicked to information about activity on the advertiser’s site (the conversion). This allows advertisers to measure ROI, and for the entire ads ecosystem to understand how well ads perform.


Existing techniques to measure conversions rely on propagating identity across sites. This is a powerful capability that has negative privacy properties. Conversion measurement shouldn’t require such a powerful capability; there ought to be a privacy preserving way to do it on the web platform.


We propose a declarative way of registering impressions and conversions, and a reporting channel which bundles impression information with conversion information in a single report.

This is similar to the ad click attribution proposal, with some substantial differences:

  1. Ad impressions in iframes are supported, rather than just first party ads (those in the main frame document). The ads ecosystem relies on iframes to isolate third party content and we don’t want to incentivize abandoning that security boundary.
  2. Third party reporting endpoints are supported, so publishers can monetize their sites without making server side changes.
  3. Our goal is to include enough information in the conversion report to allow for training ML models to predict things like “conversion rate” of a given ad, which allows publishers to monetize more effectively. This kind of training needs extremely coarse information from the advertiser, but richer data about the impression. Richer impression information also provides better protection against fraud.
  4. We are exploring adding noise with some differential privacy guarantees to the conversion reports.
  5. We are exploring server side aggregation techniques where the server can’t learn things about user conversions (i.e. Secure Aggregation, aggregating hashed values). This opens up the API to provide more useful reports with richer information.

There are still many open questions that we need to resolve, so we hope to gather more feedback via Github issues on the explainer.