GuidesAPI ReferenceRelease Notes
HomeLog InHome
Guides

Explicit personalization

Explicit personalization tailors content to declared viewer preferences, like favorite teams, followed players, preferred sports, or geography (home country or region). It’s one way to power recommendations using signals your app collects during onboarding or through an in-app interface, such as the Follow button for Moments.

Selecting content in the SDK: labels, content IDs, or both

You choose what is served to viewers through the Experiences SDK using labels, content IDs, or a mixture of both.

  • Labels: You map viewer preferences to content labels (metadata on content in Arena). The SDK uses those labels to filter or prioritize what is shown.

  • Content IDs: You ingest the Experiences content catalog using the content catalog endpoints. You query that catalog for content that matches viewer preferences. That returns a list of content IDs. You rank those IDs using your own ordering logic, then pass the ordered list to the SDK so it serves that content.

  • Mixture: You can combine label-based and ID-based data sources where your product design allows it.

That is explicit personalization: you learn what the viewer prefers, then you express that choice as labels, as ranked content IDs, or both.

Privacy considerations for explicit personalization

For explicit personalization, mapping preferences to labels or IDs happens in your app. The SDK doesn't store the preferences a viewer chooses or the mapping between a viewer and those preferences. It does store the viewer ID you set, so that the viewer stays identified across app launches. See Viewer privacy considerations and privacy compliance and Viewer ID.

How explicit personalization typically works

Most explicit personalization implementations follow a similar pattern:

  1. The viewer selects preferences (teams, players, regions, and so on).
  2. Your app stores these preferences in your backend.
  3. Your app maps preferences to content labels, or ingests and queries the Experiences catalog via Blazefeed to get content IDs that you rank, or uses a mixture of both approaches.
  4. The SDK serves content using the labels and/or ordered content IDs you provide.

This lets the SDK render personalized output without the SDK holding preference payloads.

What you can personalize

Followed/favorite entities

Personalize content based on entities (players, teams, competitions) that viewers follow or mark as favorite.

The Follow button for Moments is one way viewers declare those preferences inside the player. Your app stores the followed entity IDs, maps them to labels or ranked content IDs, and passes those values to the Experiences SDK so widgets and feeds can show content from followed entities first or exclusively.

For SDK setup, see Web SDK | iOS | Android.

Common use cases:

  • Your favorite teams widget: Show only content from teams the viewer follows.
  • Players you follow feed: Highlight Moments featuring followed players.
  • Your league section: Surface content from competitions the viewer cares about.

Implementation: Load followed entity IDs from your backend, convert them into labels or content IDs, then prioritize content from followed entities before other content.

Geo-based personalization

Personalize content using the viewer's location, nationality, or region.

Common use cases:

  • Made in [your country] widget: Highlight athletes from the viewer's country.
  • Regional highlights: Surface regionally relevant content.
  • Local team priority: Boost content from local or hometown teams.

Implementation: Filter or prioritize content using geographic labels.

Combined personalization

Blend multiple preference types to build richer, multi-layered experiences.

Common use cases:

  • Top actions with favorites first: Show all highlights, but boost the viewer's favorites.
  • Trending in [your region] + your teams: Combine regional trends with followed teams.
  • All highlights with personalized ordering: Present the full catalog but sort based on preferences.

Implementation: Use label priority to create multi-tier ordering logic.

Personalization patterns

These patterns describe how filters and priorities create different personalization behaviors.

Pattern 1: pure filter

Scenario: Show only content from the viewer's followed entities.

Best for: Fully personalized sections, such as your team's feed.

Pattern 2: prioritized display

Scenario: Boost favorites to the top while still showing all other content.

Best for: General feeds where personalization enhances rather than restricts.

Pattern 3: multi-tier prioritization

Scenario: Order content based on multiple criteria, such as:

  • Followed players
  • Viewer's region
  • Followed teams
  • Everything else

Best for: Complex personalization strategies with layered preferences.

Implementation options for explicit personalization

Use content labels, content IDs, or both to determine which content is served and in what order.

Labels-based personalizationContent catalog ID-based personalization
How it works
  • Use Labels on content.
  • Map viewer preferences to content labels.
  • Define a consistent label structure (for example, team:*, player:*, country:*).
  • Translate preferences into labels.
  • Configure the SDK with BlazeDataSourceType.labels() and use labelsPriority for ordering.
  • Ingest the Experiences content catalog using the content catalog endpoints.
  • Store and refresh the catalog using webhooks or frequent pulls.
  • Query the catalog for content that matches viewer preferences.
  • Collect content IDs, rank them, and pass the ordered list to the SDK with BlazeDataSourceType.ids().
Considerations
  • Often the lightest integration (no separate catalog service).
  • Strong fit when Arena labels align with how you model preferences.
  • Plan for a stable label scheme; major label strategy changes may need app updates.
  • Selection is limited to content that carries the labels you rely on.
  • Use when you need full control over ranking and filtering, or logic beyond labels.
  • You can use any fields you keep from the catalog in your query and rank steps.
  • Expect backend infrastructure, ongoing catalog sync, and Blazefeed or webhook operations.

Practical use case examples

Use case 1: your favorite teams widget

Goal: Show only content from teams the viewer follows.

Implementation: Labels method (pure filter)

Steps:

  • Collect the viewer's followed team IDs.
  • Translate those IDs into team labels.
  • Configure the widget's data source to include only those labels.

Use case 2: top actions with favorites first

Goal: Show all top actions but prioritize content from the viewer's followed teams or players.

Implementation: Labels method (prioritized display)

Steps:

  • Retrieve all top actions using a broad label such as top-actions.
  • Translate followed players and teams into labels.
  • Apply those labels in labelsPriority to boost them in the feed.

Result:

  • Content featuring followed players
  • Content featuring followed teams
  • All other top actions content

Use case 3: made in [your country] widget

Goal: Show content featuring athletes from the viewer's country.

Implementation: Labels method (geo-based filter)

Steps:

  • Detect the viewer's country from app settings or selection.
  • Convert it into a country label (for example, country:usa).
  • Filter the widget's content using that label.

Use case 4: multi-tier personalization

Goal: Show content in a layered order, such as followed players → region → followed teams → the rest.

Implementation: Labels method (multi-tier prioritization)

Steps:

  • Gather all relevant viewer preferences (players, teams, region).
  • Convert each preference type into a label.
  • Apply an ordered labelsPriority list reflecting the desired tiers.

Result:

  1. Content from followed players
  2. Content from the viewer's region
  3. Content from followed teams
  4. All remaining content

Use case 5: backend-powered personalized feed

Goal: Use your backend ranking logic to determine the exact content order (still explicit, driven by declared preferences or rules you own).

Implementation: Content catalog method (ID-based)

Steps:

  • Query the catalog maintained in your backend.
  • Apply your selection or ranking logic (for example, rules, scoring, A/B tests, or your models).
  • Return an ordered list of content IDs to the SDK.
  • Display results using BlazeDataSourceType.ids() with manual ordering.

This differs from implicit recommendations (For you / Trending), where WSC Sports hosts the behavior model and the ranked list in the recommendations data source.


Did this page help you?