> ## Documentation Index
> Fetch the complete documentation index at: https://docs.topsort.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

export const LastUpdated = ({date, lang = "en"}) => {
  const translations = {
    en: "Last updated:",
    es: "Última actualización:",
    pt: "Última atualização:",
    fr: "Dernière mise à jour:",
    de: "Zuletzt aktualisiert:"
  };
  const label = translations[lang] || translations.en;
  return <>
<style>{`
.last-updated-component {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 16px;
border-radius: 8px;
margin-top: 12px;
margin-bottom: 16px;
font-size: 14px;
background-color: rgba(0, 0, 0, 0.05);
border: 1px solid rgba(0, 0, 0, 0.12);
color: rgba(0, 0, 0, 0.75);
line-height: 1;
}

        .last-updated-component svg {
          flex-shrink: 0;
          vertical-align: middle;
        }

        .last-updated-component span {
          display: inline-flex !important;
          align-items: center !important;
          line-height: 1 !important;
        }

        [data-theme="dark"] .last-updated-component {
          background-color: #3a3a3a;
          border: 2px solid #888888;
          color: #ffffff;
        }

        [data-theme="dark"] .last-updated-component svg {
          stroke: #ffffff;
        }
      `}</style>
      <div className="last-updated-component">
        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
          <circle cx="12" cy="12" r="10" />
          <polyline points="12 6 12 12 16 14" />
        </svg>
        <span>
          <strong style={{
    fontWeight: 600
  }}>{label}</strong> 
          <time dateTime={date}>{date}</time>
        </span>
      </div>
    </>;
};

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  Topsort provides in-store ad solutions that integrate with existing offline display technologies, allowing retailers to show ads on their in-store screens. This system can leverage Topsort's auction engine or dynamically adapt ads based on audience demographics.
</div>

## Core Capabilities

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  Topsort's platform is designed for scalability, capable of processing high-volume data feeds for real-time and post-facto attribution, managing large data streams for various retail media components like catalog, price, and ad inventory.
</div>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  When a user can be identified across both online activities and in-store purchases, such as through loyalty programs, attribution for in-store sales can be computed based on prior online ad exposures. The platform supports both real-time and post-facto data ingestion from loyalty programs and POS systems to provide full funnel attribution, and it can integrate with existing data lakes.
</div>

### IAB/MRC Standards for In-Store DPB Measurement

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  Per IAB/MRC Retail Media Measurement Guidelines, in-store Direct Purchase Behavior (DPB) measurement must adhere to:
</div>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  * **Viewability Requirements**: In-store digital displays must meet the same viewability standards as online (50% pixels visible for required duration)
  * **Presence Detection**: Computer vision or sensor-based detection must validate actual human presence, not just device detection
  * **Attribution Windows**: Clear disclosure of time between in-store ad exposure and purchase (typically same-visit or within 24 hours)
  * **Privacy Compliance**: All tracking must be anonymous and aggregate-level only, with no persistent individual identification
  * **Data Quality**: SIVT filtration must extend to in-store metrics to exclude staff, maintenance, and non-customer traffic
</div>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  The solution also offers computer vision-based metrics for in-store audiences, including total presence and views within defined ad zones. It tracks customer behavior and journeys within the store using people detection and tracking technology, which is crucial for understanding customer paths and computing in-store attribution.
</div>

## Integration and Implementation

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  Clients have the flexibility to integrate only with Topsort's in-store ad capabilities. Implementation can begin when the client's screens are set up and configured. The system operates on a high-level API designed to be independent of the specific underlying measurement technology used in the store.
</div>

### Presence Events and Measurement Standards

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  Presence events, which are the in-store equivalent of online impressions, are generated by the measurement technology layer and sent to Topsort for audience and attribution calculations. Per IAB/MRC guidelines:
</div>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  * **Opportunity to See (OTS)**: Presence events must validate that a customer was positioned to potentially view the display
  * **Dwell Time**: Minimum dwell time of 1 second for display ads, 2 seconds for video content
  * **Zone Definition**: Clear delineation of viewable zones based on screen size and viewing angles
  * **Validation Methods**: Computer vision, thermal sensors, or beacon technology with accuracy thresholds documented
</div>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  Purchase events from in-store points of sale are reported with an added placement field to identify the specific point of sale. This enables:
</div>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  * **Closed-loop Attribution**: Linking in-store ad exposure to same-visit purchases
  * **Cross-channel Attribution**: Connecting online ad exposure to in-store purchases via loyalty IDs
  * **Incrementality Measurement**: Comparing exposed vs non-exposed store visitors
</div>

## Asset Upload Management

### Sequential Upload Process

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  In-Store Ads now features an improved asset upload flow that processes files sequentially for better reliability and error handling.
</div>

<Steps>
  <Step title="Select Assets">
    Choose your creative files from your local system
  </Step>

  <Step title="Sequential Processing">
    Assets are uploaded one at a time, with clear progress indicators
  </Step>

  <Step title="Validation">
    Each asset is validated before moving to the next
  </Step>

  <Step title="Error Handling">
    If an upload fails, you'll see specific error messages and can retry
  </Step>
</Steps>

### Upload Limits

* Maximum creatives per campaign: \[REQUEST FROM PM]
* Supported file formats: \[REQUEST FROM PM]
* Maximum file size: \[REQUEST FROM PM]

<Note>
  The upload button is automatically disabled when you reach the maximum number
  of creatives.
</Note>

### Cache Refresh

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  The system automatically refreshes the cache when you focus on the upload area, ensuring you always see the most up-to-date list of assets.
</div>

### Error Messages

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  Common upload errors and their solutions:
</div>

| Error                       | Cause                           | Solution                                         |
| --------------------------- | ------------------------------- | ------------------------------------------------ |
| "File format not supported" | Invalid file type               | Use supported formats: \[LIST]                   |
| "File too large"            | Exceeds size limit              | Compress or resize the file                      |
| "Upload limit reached"      | Maximum creatives uploaded      | Remove existing assets or create new campaign    |
| "Validation failed"         | Asset doesn't meet requirements | Check dimensions, format, and content guidelines |

## Privacy Considerations

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  Privacy is a key consideration, and the system employs opaque track IDs and short-lived data structures to track individuals across different zones without storing images. The attribution methods are designed with privacy in mind, aiming to obscure the direct relationship between in-store tracking IDs and personal user IDs.
</div>

***

<LastUpdated date="2025-11-24" />
