Topics API

Implement privacy-first interest-based advertising with Google's Topics API. Learn technical implementation, privacy mechanisms, and best practices for modern web applications.

What Is the Topics API and Why It Matters

The Topics API represents a paradigm shift in how interest-based advertising operates on the web. Traditional advertising relied heavily on third-party cookies, which allowed ad tech platforms to track users across multiple websites, building comprehensive profiles of their interests and behaviors. However, this approach raised significant privacy concerns and is now being deprecated across major browsers. The Topics API proposes an alternative: rather than tracking users across the web, the browser itself observes the topics of websites a user visits, and these topics are surfaced to advertisers in a privacy-preserving manner.

At its core, the Topics API allows websites and ad tech platforms to access interest-based signals without requiring cross-site tracking. When a user visits websites, the browser classifies the content into topics from a predefined taxonomy. These topics are stored locally on the user's device and can be accessed by calling the API. Critically, the API is designed to only return topics that the calling site has itself observed, preventing unauthorized fingerprinting and ensuring that user interests remain private.

The transition from third-party cookie tracking to browser-mediated interest signals marks a fundamental change in how advertising personalization works on the web. Instead of external servers building detailed profiles of user behavior across thousands of websites, the browser becomes the central authority for interest classification. This architecture gives users more visibility into what information is being shared while still enabling advertisers to deliver relevant content based on genuine interests rather than invasive tracking.

As part of Google's Privacy Sandbox initiative, the Topics API addresses the core tension between personalized advertising and user privacy. The API keeps user data on the device, prevents fingerprinting, and provides transparency about how interest signals are generated and shared. For web development teams building advertising technology solutions, understanding this API is essential for adapting to the post-third-party cookie future of digital marketing.

By implementing Topics API alongside other modern web techniques like those covered in our guide to the Gamepad API, developers can build sophisticated web applications that leverage browser capabilities while respecting user privacy. Additionally, understanding how user inputs are handled in the browser context—as explored in our User Input Methods guide—complements the Topics API's approach to privacy-respecting feature detection and consent patterns. For developers working with structured data approaches like GraphQL fragments, these patterns provide additional context for building efficient API integrations.

Key Differences from Third-Party Cookies

Compared to third-party cookies, the Topics API offers several structural advantages from a privacy perspective. Third-party cookies enable persistent tracking across any website that includes a particular ad tech provider's code, allowing the creation of detailed cross-site user profiles. The Topics API, by contrast, only shares topics that the calling site has observed, preventing the creation of comprehensive user graphs across unrelated websites.

The on-device processing model means that classification of website content into topics happens locally within the user's browser. Raw data about browsing activity never leaves the device in identifiable form—only the resulting high-level topics are made available to developers. This architecture ensures that even if a site calls the Topics API, it cannot access information about the specific pages a user visited on other sites, only the broad topic categories associated with their activity.

The time-limited epoch system provides additional privacy protection. Each week, the browser calculates the user's top topics based on recent browsing activity, and only five topics are retained per epoch. Older topics are discarded as new ones are calculated, preventing the accumulation of detailed historical interest profiles. This temporal boundary ensures that the API reflects current interests rather than allowing advertisers to build permanent dossiers of user behavior.

The coarse-grained topic taxonomy further protects privacy by preventing individual identification. Topics represent broad areas of interest shared by many users rather than specific products or detailed categories. For example, visiting camera review pages might classify a user under "Consumer Electronics" or "Photography" rather than tracking specific brand preferences, making it statistically impossible to identify individuals based on their topic profiles.

Key Concepts

Topic Taxonomy

350+ topics across broad categories like arts, business, health, and technology

Epoch Cycles

Weekly topic updates prevent stale interest profiles

Caller Isolation

Sites only see topics they have directly observed

k-Anonymity

Statistical thresholds prevent individual identification

Technical Architecture and Core Concepts

Understanding the technical architecture of the Topics API requires examining several interconnected components working together to provide privacy-preserving interest signals. The system consists of four main elements: the topic taxonomy that classifies website content, the epoch mechanism that governs topic updates, the observation system that records user activity, and the API surface that exposes topics to developers.

The architecture follows a privacy-by-design approach where each component incorporates protective measures at its foundation. Rather than adding privacy as an afterthought, the API's design ensures that tracking prevention is inherent to how the system operates. This architectural philosophy aligns with modern web development best practices for building privacy-conscious applications, similar to how developers approach MediaStream Recording API implementations with user consent as a core requirement. For teams working with TypeScript, understanding how to use mixins for code reuse can help create more maintainable ad tech implementations that follow similar privacy-preserving patterns.

Topic Taxonomy and Classification

The Topics API uses a taxonomy of approximately 350 topics organized into several broad categories including arts and entertainment, business, computers and electronics, health, science, sports, and many others. This taxonomy is maintained by trusted ecosystem contributors and is designed to exclude sensitive categories such as ethnicity, sexual orientation, or political affiliation, ensuring that the API cannot be used to infer personal characteristics that users would expect to remain private.

When a user visits a website, the browser analyzes the page content using machine learning models trained to classify text into topic categories. The system considers page text, headings, metadata, and other content signals to determine relevant topics. For example, a technology blog reviewing smartphones might be classified under "Consumer Electronics" and "Mobile Devices," while a financial news site might trigger topics like "Business and Finance" and "Investing."

The taxonomy is intentionally coarse-grained to prevent fingerprinting attacks. Rather than identifying specific products or detailed interest categories, topics represent broad areas of interest that are shared by millions of users. This coarseness ensures that individual users cannot be uniquely identified based on their topic profiles—a fundamental requirement for any privacy-preserving advertising system. The taxonomy undergoes periodic review by ecosystem stakeholders to ensure it remains relevant while maintaining privacy protections.

Topic Taxonomy Example
1/*2The taxonomy includes topics like:3- Arts & Entertainment4  - Books and Literature5  - Movies6  - Music7  - Television8- Business9  - Business and Finance10  - Careers11  - Small Business12- Computers and Electronics13  - Computer Hardware14  - Consumer Electronics15  - Software16- Health17  - Fitness and Nutrition18  - Medical Health19  - Mental Health20- Science21  - Astronomy22  - Biology23  - Chemistry24  - Physics25 26Topics are assigned based on page content analysis27*/

Epochs and Topic Updates

The Topics API operates on a weekly epoch cycle that governs how topic data is calculated and retained. At the end of each epoch—defaulting to one week—the browser calculates the user's top topics based on the websites visited during that period. This calculation considers both the frequency of visits to sites within each topic category and the recency of that activity, with recent visits weighted more heavily.

Only a limited number of topics are retained per epoch, typically five, while older topics are discarded as new ones are calculated. This temporal limitation serves multiple privacy purposes: it prevents the accumulation of detailed historical interest profiles, ensures that topic data reflects current rather than stale interests, and creates natural boundaries that prevent correlation of topic data across extended time periods.

The epoch mechanism also impacts how developers should structure their implementations. Since topic data only updates weekly, frequent polling of the API provides no benefit and wastes computational resources. Instead, developers should implement caching strategies that store topic data for the duration of an epoch and only refresh when a new epoch begins. This approach aligns with performance best practices for Next.js proxy implementations where efficient caching reduces unnecessary network requests and improves application responsiveness.

The epoch boundaries also mean that newly visited sites may not immediately contribute to a user's topic profile. Sites visited during the current epoch are counted toward the next epoch's calculation, creating a one-week delay between browsing activity and topic inclusion. This delay is intentional—it prevents real-time tracking while still providing advertisers with relevant interest signals.

Observation Mechanism

Observation is the process by which the browser records a user's visit to a website as relevant to particular topics. When a page loads and the Topics API is enabled, the browser classifies the page content using its taxonomy and records that the user has been observed for those topics. This observation is critical because topics can only be returned through the API if they have been observed for the calling site.

Importantly, topics are only observed when explicitly enabled through HTTP headers or iframe attributes. Site operators have control over when observation occurs, allowing them to exclude certain pages or sections from contributing to user topics. For example, a news site might enable observation for article pages while excluding observation for user account pages or checkout flows.

The observation system includes caller limitations that prevent cross-site tracking. When a site calls the Topics API, it only receives topics that it has itself observed. A site cannot learn about topics that were observed by other sites, preventing the reconstruction of cross-site user profiles through API calls. This caller-specific isolation works at the site-origin level, meaning that subdomains share observation data within the same registered domain while different domains remain isolated from each other.

For developers implementing the observation mechanism, the process is largely automatic once enabled. The browser handles classification and observation, requiring only that sites include appropriate headers or attributes to activate the feature. This design simplifies implementation while maintaining strong privacy guarantees, much like how HTMLAnchorElement handling provides developers with intuitive APIs while browsers manage the underlying complexity.

API Reference and Implementation

Implementing the Topics API requires understanding both the JavaScript API surface and HTTP header mechanisms that enable topic observation and retrieval. The API provides multiple access patterns to accommodate different integration scenarios, from client-side JavaScript calls for real-time personalization to server-side header integration for backend ad decisioning systems. This section provides a complete API reference with practical implementation examples for common use cases.

The API design prioritizes simplicity while maintaining the privacy protections that distinguish Topics API from traditional tracking mechanisms. Developers familiar with modern JavaScript patterns will find the API straightforward to integrate, though proper error handling and feature detection are essential for production deployments. Understanding these patterns is valuable for web developers working across various API integrations, including our guide to Text Editors in React where similar feature detection patterns apply. For styling ad tech interfaces, understanding the differences between Styled Components and Emotion can help developers choose the right CSS-in-JS solution for their implementation.

Checking API Support and Fetching Topics
1// Check if Topics API is supported2if ('browsingTopics' in document) {3  try {4    const topics = await document.browsingTopics();5    topics.forEach(topic => {6      console.log(`Topic: ${topic.topic}`);7      console.log(`Version: ${topic.apiVersion}`);8      console.log(`Timeout: ${topic.timeout}`);9    });10  } catch (error) {11    console.error('Error fetching topics:', error);12  }13} else {14  console.log('Topics API is not supported in this browser');15}

The browsingTopics() Method

The primary JavaScript interface for accessing topics is the browsingTopics() method available on the Document interface. This method returns a promise that resolves to an array of Topic objects representing the user's current topics. Each Topic object contains several properties: the topic identifier that maps to the taxonomy, the apiVersion indicating the specification version used, and a timeout value that indicates when the topic will be removed from the user's profile.

The method returns topics from the current epoch and up to two previous epochs, providing up to three topics total in most cases. This limited scope ensures that topic data remains current while providing enough signal for meaningful personalization. Topics are ordered by recency, with the most recently observed topics appearing first in the array. If no topics are available—for example, if the user has not visited enough pages with Topics API observation enabled—the method returns an empty array rather than throwing an error.

Developers should handle the empty array case gracefully, as this represents a common scenario for new users or those with privacy settings that limit observation. Rather than treating empty topics as an error, implementations should fall back to contextual targeting or other personalization methods. This defensive approach ensures a consistent user experience regardless of topic availability.

Complete Implementation with Error Handling
1async function getTopicsWithFallback() {2  // Check basic support3  if (!('browsingTopics' in document)) {4    return { error: 'not_supported', message: 'Topics API is not supported' };5  }6 7  try {8    const topics = await document.browsingTopics();9 10    if (topics.length === 0) {11      return { error: 'no_topics', message: 'No topics available for this user' };12    }13 14    return { success: true, topics };15  } catch (error) {16    if (error.name === 'NotAllowedError') {17      return { error: 'not_allowed', message: 'Topics API access denied' };18    }19    return { error: 'unknown', message: error.message };20  }21}22 23// Usage24getTopicsWithFallback().then(result => {25  if (result.success) {26    console.log('User topics:', result.topics);27  } else {28    console.log('Fallback to alternative targeting');29  }30});

HTTP Header Integration

The Topics API supports HTTP header-based integration, which is particularly valuable for server-side ad decisioning systems that require topic information for bid requests. When making fetch requests, sites can include the Sec-Browsing-Topics header to transmit topics to ad servers, allowing backend systems to incorporate interest signals into their decisioning algorithms without requiring client-side JavaScript execution.

The Observe-Browsing-Topics header serves a complementary purpose, marking the request as an observation point where the user's visit should be recorded for future topic calculation. This header-based approach is particularly useful for ad tech platforms that operate server-side bidding systems, where topic information needs to be transmitted to backend systems rather than processed entirely in the browser.

For iframe-based ad integrations, the browsingTopics attribute on iframe elements provides a declarative way to enable topic observation and transmission for embedded ad content. When this attribute is set to true, the iframe both transmits observed topics in its requests and records the current page as relevant to those topics for future API calls. This pattern simplifies integration for ad networks that use standard iframe-based ad units.

HTTP Header Integration
1// Fetch with topics header for server-side ad decisioning2async function fetchWithTopics(url) {3  const response = await fetch(url, {4    method: 'GET',5    headers: {6      'Sec-Browsing-Topics': 'true'7    }8  });9  return response.json();10}11 12// Iframe integration for embedded ads13const iframe = document.createElement('iframe');14iframe.src = 'https://ad-server.example.com/ad';15iframe.browsingTopics = true;16document.body.appendChild(iframe);

Privacy Mechanisms and Protections

The Topics API's privacy architecture is fundamental to its design rather than an afterthought. These mechanisms distinguish the API from traditional tracking approaches and are essential for building applications that meet modern privacy expectations. Understanding these protections helps developers build privacy-conscious applications and enables informed discussions with stakeholders about the API's suitability for specific use cases.

Privacy protections in the Topics API operate at multiple levels: technical mechanisms prevent identification, structural limitations constrain data sharing, and user controls provide transparency and choice. This multi-layered approach ensures that even if one protection is circumvented, others remain in place to protect user privacy. This philosophy aligns with best practices for building secure web applications that our team applies across all web development services.

Privacy Protection Mechanisms

Caller Isolation

Sites only receive topics they have observed—preventing cross-site tracking

k-Anonymity

Topics must be shared by minimum k users before exposure

User Controls

Users can view, manage, and disable Topics API through browser settings

On-Device Processing

Classification happens locally; raw data never leaves the device

Caller Isolation

Caller isolation represents one of the most important privacy protections in the Topics API. When a site calls the browsingTopics() method, the API only returns topics that the calling site has itself observed. This means that a site cannot learn about topics a user demonstrated interest in on other, unrelated websites, preventing the reconstruction of comprehensive cross-site user profiles through API calls.

The isolation mechanism operates at the site-origin level, meaning that subdomains share observation data within the same registered domain while different domains remain isolated from each other. This design allows large web properties with multiple subdomains to build coherent user interest profiles—for example, a news organization with subdomains for different publication sections—while preventing unrelated sites from correlating user activity across the web.

k-Anonymity Protections

The Topics API implements k-anonymity protections to prevent individual identification through topic data. Before a topic is made available through the API, it must be shared by at least k users within the user population, where k is typically in the tens or hundreds. This statistical threshold ensures that exposing a topic through the API cannot be used to identify a specific individual—the topic is always shared by a sufficiently large group of users.

The k-anonymity mechanism operates at the epoch level and across the entire user population using the browser. Topics that do not meet the k-anonymity threshold are not returned through the API, even if they were observed for the calling site. This ensures that all topic data exposed through the API represents genuinely shared interests rather than potentially identifying individual behavior patterns. The threshold is calibrated to balance privacy protection with the utility of the API for advertising purposes.

This statistical protection approach differs fundamentally from traditional tracking methods that could identify users with precision. By ensuring that topic exposure only occurs when topics are shared by many users, the API maintains advertising utility while providing strong privacy guarantees. Similar privacy-preserving approaches are explored in our guide to the EyeDropper API where browser APIs provide controlled access to system resources.

Enrollment and Browser Support

The Topics API has specific enrollment requirements and limited browser support that developers must understand before planning implementation. Unlike standard web APIs that are universally available, the Topics API requires explicit enrollment and is currently only supported in Google Chrome and Chromium-based browsers. This section covers the enrollment process and browser compatibility considerations that impact production deployments.

Understanding these requirements is essential for accurate project planning and setting appropriate expectations with stakeholders. Teams should evaluate whether Topics API implementation aligns with their target audience demographics, as a significant portion of users may be inaccessible through this mechanism alone. For comprehensive advertising strategies that work across all browsers, our SEO services can provide alternative approaches to audience targeting that complement Topics API implementations.

Browser Support for Topics API
BrowserSupport StatusNotes
Google ChromeSupportedRequires Privacy Sandbox enrollment
Microsoft EdgeSupportedChromium-based, same enrollment requirements
Mozilla FirefoxNot SupportedHas expressed privacy concerns
Apple SafariNot SupportedOpposed to the specification
Other BrowsersVariesCheck individual browser documentation

Privacy Sandbox Enrollment Process

To use the Topics API in production, developers must complete the Privacy Sandbox enrollment process managed by Google. This process verifies the developer's identity and intended use case, ensuring that the API is used responsibly by legitimate parties. Enrollment is required for both the Topics API and other Privacy Sandbox APIs that provide advertising functionality.

The enrollment process involves several steps: creating a Privacy Sandbox account, providing business verification information such as company registration details, and agreeing to the Privacy Sandbox terms of use. Once enrolled, developers receive unique identifiers that enable API access and allow Chrome to verify that calls are coming from legitimate, enrolled parties. Unenrolled sites attempting to use the API will receive errors or empty results, making enrollment a prerequisite for production use.

For development and testing, Chrome provides ways to enable the Topics API without full enrollment, allowing teams to build and test implementations before completing the formal enrollment process. However, production deployments must complete enrollment to ensure reliable API access.

Enrollment Verification Pattern
1// Server-side enrollment verification recommended2async function getEnrolledTopics() {3  // Verify enrollment server-side4  const response = await fetch('/api/verify-enrollment');5  const { enrolled } = await response.json();6 7  if (!enrolled) {8    throw new Error('Site is not enrolled in Privacy Sandbox');9  }10 11  return document.browsingTopics();12}

Performance Best Practices

Implementing the Topics API with performance in mind requires understanding its computational characteristics and integration patterns. While the API itself is designed to be lightweight, improper integration can introduce performance issues that affect page load times and user experience. This section covers performance considerations and best practices for production implementations that maintain excellent Core Web Vitals scores.

The asynchronous nature of the browsingTopics() method means that proper integration patterns are essential for avoiding performance pitfalls. Developers should initiate topic fetching at appropriate points in the page lifecycle, cache results effectively, and handle edge cases without blocking critical rendering paths. These performance patterns align with general web development best practices for building fast, responsive applications.

Parallel Initialization Pattern
1// Initialize ad tech without blocking rendering2async function initializeAdTech() {3  // Start fetching topics without blocking4  const topicsPromise = document.browsingTopics().catch(() => []);5 6  // Perform other initialization in parallel7  await Promise.all([8    loadAdConfiguration(),9    initializeConsentManagement(),10    topicsPromise11  ]);12 13  // Process topics when available14  const topics = await topicsPromise;15  if (topics.length > 0) {16    updateTargetingParameters(topics);17  }18}

Efficient API Integration

The browsingTopics() method returns a promise, meaning it operates asynchronously and should be handled appropriately in code flow. For optimal performance, calls to browsingTopics() should be made early in the page lifecycle but without blocking critical rendering. The most effective pattern is to initiate the topics fetch in parallel with other initialization tasks and handle the results when they become available.

The parallel initialization pattern shown above starts fetching topics alongside other ad tech initialization tasks, allowing all operations to complete concurrently rather than sequentially. This approach minimizes the time until topic data is available while ensuring that topic fetching does not delay other critical page resources. For teams building modern web applications, this pattern integrates well with React grid component implementations where similar async data patterns are common.

Caching Strategies

Topic data changes weekly with each new epoch, meaning that frequent polling of the API provides no benefit and wastes computational resources. Implementations should cache topic data and only refresh when necessary—for example, when a new epoch begins or after significant page navigation. The topic data itself is read-only and consistent within an epoch, making simple in-memory caching appropriate for most use cases.

For single-page applications, caching topic data at the application level eliminates redundant API calls during user sessions. For multi-page sites, topic data can be stored in session storage or passed through the session to avoid repeated API calls on page transitions. The key principle is to minimize API calls while ensuring that topic data remains fresh—checking for epoch changes weekly rather than polling continuously.

Production Implementation

Moving the Topics API from development to production requires attention to several operational considerations including testing strategies, deployment patterns, and monitoring. This section provides guidance for teams implementing the API at scale in production environments where reliability and performance are critical requirements.

Production implementations must handle a wide range of scenarios gracefully, from browsers where the API is unavailable to edge cases where topic data is empty or unexpected. Comprehensive testing and monitoring ensure that implementations perform reliably across the diverse environments encountered in production use.

Testing Utility for API Availability
1// Test utility for verifying API availability2function verifyTopicsApiSupport() {3  const checks = {4    browserSupport: 'browsingTopics' in document,5    privacySandboxEnabled: window.googletag?.isPrivacySandboxEnabled?.() ?? true,6    enrollmentActive: true // Verify server-side7  };8 9  const allSupported = Object.values(checks).every(v => v);10  return { supported: allSupported, checks };11}

Testing Strategies

Testing the Topics API requires Chrome with Privacy Sandbox enabled, as the API is only available in Chrome and Chromium-based browsers. Development teams should ensure that testing environments have the appropriate browser configuration and that test users have the necessary feature flags enabled. Testing should cover both the happy path—where topics are successfully retrieved and used—and edge cases where the API is unavailable or returns unexpected results.

Automated testing presents challenges since the Topics API is browser-specific. Teams should consider using browser automation tools that support Chrome with Privacy Sandbox flags enabled for integration testing, while maintaining fallback testing paths for other scenarios. Manual testing in various browser configurations helps ensure graceful degradation for users on unsupported browsers.

Fallback Strategies

Robust implementations must handle scenarios where the Topics API is unavailable—whether due to browser support limitations, user settings, or enrollment issues. The recommended approach is to implement fallback targeting strategies that provide reasonable personalization even without topic data. These fallbacks ensure consistent user experience across all browser types.

Common fallback strategies include contextual targeting, which selects ads based on page content rather than user interest, and first-party data targeting, which uses data the site has collected directly from users such as account preferences or past purchases. Time-based or geographic targeting provides additional signals when user interest data is unavailable. The appropriate fallback depends on the specific use case and the sensitivity of the advertising being delivered.

Many successful implementations combine multiple approaches: using Topics API for Chrome users who support it while falling back to contextual targeting for other browsers. This multi-pronged strategy maximizes personalization reach while respecting the privacy constraints of different browser environments. For organizations seeking comprehensive ad tech solutions, our web development team can help design and implement fallback strategies that maintain personalization across all user segments.

Frequently Asked Questions

Future Outlook and Alternatives

The Topics API exists within a rapidly evolving privacy and advertising landscape. Understanding the broader context—including potential changes to the API, alternative approaches, and the competitive dynamics between browsers—helps developers make informed decisions about investment in Topics API implementation. The web platform continues to evolve, and developers should stay current with emerging standards and browser implementations.

Alternative approaches to privacy-preserving advertising have gained traction alongside Topics API development. First-party data strategies leverage information users have explicitly shared with a site, such as account preferences or purchase history, providing highly relevant targeting without cross-site tracking. Contextual advertising selects ad content based on page content rather than user history, offering privacy-friendly personalization that works across all browsers. The Protected Audience API (formerly FLEDGE) enables remarketing and custom audience use cases with on-device processing that keeps user data private.

Each approach has different characteristics in terms of targeting precision, privacy properties, and implementation complexity. Many advertising platforms are adopting multi-pronged strategies that use Topics API for users who support it while falling back to contextual or first-party approaches for others. This approach maximizes reach while respecting user privacy across all browser types and user preferences. Our team specializes in helping organizations navigate this evolving landscape—contact us to discuss how we can support your advertising technology initiatives.

Alternative Approaches

First-Party Data

Leverage information users have explicitly shared with your site

Contextual Advertising

Target based on page content rather than user history

Protected Audience API

Enable remarketing with on-device processing

Consent-Based Tracking

Use explicit user consent for traditional tracking

Strategic Considerations

Many advertising platforms are adopting multi-pronged strategies that use Topics API for supported browsers while falling back to contextual or first-party approaches for others. This approach maximizes reach while respecting user privacy across all browser types. The Topics API's future depends on broader adoption and potential standardization, which will be influenced by browser vendor decisions and ecosystem feedback.

Developers should monitor the W3C Privacy Community Group discussions and be prepared to adapt as the ecosystem evolves. The Privacy Sandbox initiative continues to evolve based on regulatory review and ecosystem feedback, and specifications may change before reaching final standardization. Teams implementing Topics API should design for flexibility, allowing adaptation to specification changes or alternative approaches as needed.

For organizations investing in privacy-preserving advertising technology, working with experienced development partners can help navigate the evolving landscape. Our team stays current with emerging web standards and can help organizations implement advertising solutions that balance personalization with privacy compliance. Contact us to discuss how we can support your advertising technology initiatives.

Ready to Implement Privacy-First Advertising?

Our team of web development experts can help you integrate the Topics API and build privacy-respecting advertising solutions that work across all browsers.