Document: browsingTopics() method

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

Warning: This feature is currently opposed by two browser vendors. See the Standards positions section below for details of opposition.

Note: An Enrollment process is required to use this feature in your applications.

The browsingTopics() method of the Document interface returns a promise that fulfills with an array of objects representing the top topics for the user, one from each of the last three epochs. These topics could then be returned to the ad tech platform in a subsequent fetch request. By default, the method also causes the browser to record the current page visit as observed by the caller, so the page's hostname can later be used in topics calculation.

See Using the Topics API for more details.

Note: browsingTopics() does not rely on HTTP headers to send topics and mark topics as observed like the other Topics API enabling features, but it is somewhat less performant. You are advised to use one of the HTTP header-using features, falling back to browsingTopics() only in situations where the headers cannot be modified.




options Optional

An options object, which can contain the following properties:


A boolean value that, if set to true, causes the browser to not observe topics when browsingTopics() is invoked. The default is false, which causes topics to be observed.

Return value

A Promise that fulfills with an array of up to three objects representing the current user's selected topics for the last three epochs. Each object contains the following properties:


A string identifying the algorithm (other than the model part) used to calculate the topic.


A string representing the model used to classify a string (such as a web page's hostname) into topic IDs.


A string representing the taxonomy version used.


A number representing the ID of the topic, which can be used by the browser to retrieve the topic from the taxonomy (see an example taxonomy of interests).


The configVersion, modelVersion, and taxonomyVersion, concatenated with colons (:) between each.

The exact property values may vary by browser implementation. An example object from Chrome might look as follows:

  configVersion: "chrome.1",
  modelVersion: "1",
  taxonomyVersion: "1",
  topic: 43,
  version: "chrome.1:1:1"


NotAllowedError DOMException

Thrown if:


// Get an array of top topics for this user
const topics = await document.browsingTopics();

// Request an ad creative
const response = await fetch("https://ads.example/get-creative", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  body: JSON.stringify(topics),

// Get the JSON from the response
const creative = await response.json();

// Display ad


This feature is not part of an official standard, although it is specified in the Topics API Unofficial Proposal Draft.

Browser compatibility

BCD tables only load in the browser

See also