Documentation

What Are Exposure Sources?

Exposure sources let you send ad-exposure data into MX8 Labs so it can be matched against survey respondents. This is the foundation of ad-effectiveness research - by linking who saw an ad with how they responded to a survey, you can measure real-world campaign impact.

How exposure data works

Every time a person is exposed to an ad, a record is created that captures at minimum an IP address (plaintext or hashed), a user identifier (UID), and the brand associated with the ad. MX8 Labs stores these records and later matches them to incoming survey responses so you can compare exposed and unexposed audiences.

Two ways to send exposure data

MX8 Labs supports two ingest methods. Which one you choose depends on where your exposure data originates and how much control you need over the delivery process.

Pixel - A lightweight tracking endpoint hosted by MX8 Labs. You embed a pixel URL in your ad server or tag manager, and each time the pixel fires it captures an exposure event in real time. Pixel sources are ideal when you want a quick, low-integration setup and your ad platform supports third-party pixel calls.

S3 snapshot - A server-side file-based approach. You upload gzip-compressed CSV files containing exposure records directly into an MX8 Labs-managed S3 bucket. S3 snapshot sources are ideal when you already collect exposure data in your own systems and prefer to send it in batch, or when you need to hash IP addresses before they leave your environment.

c3b92144 278a 4906 846f 6f5c13286edb

Key terminology
  • Source name - A human-readable label for your exposure source. Once created, this cannot be changed.
  • Dimension - An additional attribute you attach to each exposure record (for example, brand). Dimensions are used as query-parameter keys for pixels and as aggregation buckets in reporting.
  • Retention days - How long MX8 Labs keeps exposure records for matching. The default is 7 days, but this can be adjusted to suit your campaign timeline.
  • UID - Your user identifier, up to 128 characters. This is appended to respondent records during matching.
  • Hashed IP - An IP address that has been run through a hashing algorithm (currently MD5) before being sent to MX8 Labs. This lets you avoid transmitting plaintext IP addresses.
Using exposure data in your survey

Once your exposure source is sending data into MX8 Labs, you wire it into a survey with get_exposed_value and a s.tag() block. get_exposed_value looks up the current respondent's exposed value for the dimension you configured on the source; wrapping the rest of the survey in with s.tag(exposed=exposed): tags every question with that value, which is what the lift report's Indicator Tag reads on the other end.

from survey import Survey

s = Survey(**globals())

exposed = s.get_exposed_value(
    source="campaign-123",
    exposed_dimension="brand",
)

with s.tag(exposed=exposed):
    # The rest of your survey runs inside the block.
    # Every question is tagged with the respondent's
    # exposed value automatically.
    s.select_question(
        "How familiar are you with this brand?",
        options=["Very familiar", "Somewhat familiar", "Not familiar"],
    )
    # ... other questions ...

s.complete()

For the lift-reporting side that reads this tag, see Reporting lift against control groups.

Next steps