Link Search Menu Expand Document

Sincera Modules

Overview

Sincera’s Synthetic User is unique in that it has small applets, called “Modules” that can be combined to create a variety of different jobs. Each module is designed to perform a specific task, and can be combined with other modules within a job. For example, you can combine the check_ats module with the count_ad_slots module to create a job that will return the ATS ID and the count of ad slots for a given URL.

Module Budgets

In an effort to improve latency for Private Jobs running with Existing Modules, we are introducing a Module Budget functionality which sets a threshold for the number of modules that can be run in a single Private Job:

Module Budget Test
This change will only apply to new Private Jobs created post-launch.

If any Private Job exceeds the alloted budget, you’ll be able to save it but it will not be allowed to run:

  • You can remove modules to get below the threshold in order to run the Private Job
  • You can duplicate the Private Job and split the number of modules between the two Private Jobs

Result Data

Note that when you add a Module to your Synthetic User Job, by default each module will create it’s own .csv file, within a single .zip file. If you would prefer the results in one file, consider using Single File Output (SFO) mode.

Module Output

In standard mode, all modules will include 3 columns in the output file. These are: URL (in col_0 position) status, (col_1) and the module_name, which is in the col_2 position. All modules utilize the same success and error codes, defined below. Each module will never output more than one “column” (col_2) of data. col_0 and col_1 are reserved for the URL and status code, respectively, and col_0 will always be the URL that was inputted into the job from your file.

Existing Modules

Asset

Asset modules gather and format site content.

Collect Text (asset_collect_text)

Collect Text will extract all of the text from a given URL, alongside metadata specific to the written content on the page. This module is useful for understanding the content of a given URL, and can be used to build or augment contextual-based offerings.

Field Data Type Definition
ads_success BOOLEAN This field will return true or false if any ads are detected on the page
article_body STRING A cleaned version of the article body of the page
article_body_chars INT The count of characters in the article_body field
article_excerpt STRING A cleaned version of the article body
article_title STRING A cleaned version of the article title
asset STRING The raw body of the page
char_count INT The count of characters in the asset field
page_description STRING The raw page description as found by our synthetic user
page_keywords STRING The raw keywords identified on the page from the meta tags
page_language STRING The language of the page as found by our synthetic user using document.documentElement.lang
page_title STRING The title of the page as found on the page from the meta tags
page_type STRING The page type (“article”, etc..) as found on the page from the meta tags
status STRING Returns success or error-x depending on the outcome of the visit
url_text List of Strings Keywords from the url texts found on the page (Inner text from the urls links)

Example Payload:

[
  {
    status: "success",
    ads_success: false,
    page_language: "en",
    page_description:
      "The scale of the reaction from Iran and its regional proxies to the attacks on two of Israel’s largest foes could determine whether the low-level regional battle tips into a full-scale conflict.",
    page_keywords: "Assassination,Israel,Iran,Lebanon,Hezbollah",
    page_type: "article",
    page_title:
      "Strikes in Iran and Lebanon Raise Risk of Escalation, but All-Out War Is Not Inevitable - The New York Times",
    article_body:
      "AdvertisementSKIP ADVERTISEMENTThe scale of the reaction from Iran and its regional proxies to the attacks on two of Israel’s largest foes could determine whether the low-level regional battle tips into a full-scale conflict.Rescue workers at the scene of an Israeli airstrike in Dahiyeh, a suburb of Beirut, Lebanon, on Wednesday.Credit...(truncated)",
    article_body_chars: 5578,
    article_title:
      "Strikes in Iran and Lebanon Raise Risk of Escalation, but All-Out War Is Not Inevitable",
    article_excerpt:
      "The scale of the reaction from Iran and its regional proxies to the attacks on two of Israel’s largest foes could determine whether the low-level regional battle tips into a full-scale conflict.",
    asset:
      "Strikes in Iran and Lebanon Raise Risk of Escalation, but All-Out War Is Not Inevitable - The New York Times Skip to content Skip to site index Search & Section Navigation Section Navigation SEARCHMiddle East SUBSCRIBE FOR $1/WEEKLog in Wednesday, July 31, 2024 Today’s Paper SUBSCRIBE FOR $1/WEEKMiddle East Crisislive Updates July 31, 2024, 12:04 p.m. ...(truncated)",
    char_count: 9588,
    url_text: [
      "SKIP TO CONTENT",
      "SKIP TO SITE INDEX",
      "Middle East",
      "SUBSCRIBE FOR $1/WEEK",
      "LOG IN",
      "Today’s Paper",
      (truncated...),
    ],
  },
];
Collect Images (asset_collect_images)

Collect Images will extract all the images from a given URL, alongside metadata specific to the image content on the page. This module is useful for understanding the set of images displayed within a given URL, and can be used to build or augment contextual-based offerings.

Field Data Type Definition
status STRING Returns success or error-x depending on the outcome of the visit
ads_success BOOLEAN This field will return true or false if any ads are detected on the page
article_body STRING A cleaned version of the article body of the page
article_body_chars INT The count of characters in the article_body field
article_excerpt STRING A cleaned version of the article body
article_title STRING A cleaned version of the article title
asset STRING The raw body of the page
char_count INT The count of characters in the asset field
page_description STRING The raw page description as found by our synthetic user
page_keywords STRING The raw keywords identified on the page from the meta tags
page_language STRING The language of the page as found by our synthetic user using document.documentElement.lang
page_title STRING The title of the page as found on the page from the meta tags
page_type STRING The page type (“article”, etc..) as found on the page from the meta tags
url_text List of Strings Keywords from the url texts found on the page (Inner text from the urls links)

Example Payload:

[
  {
    status: "success",
    ads_success: false,
    asset:
      "https://static.sitejabber.com/img/branding/widget/logo_light.1723470609.svg",
    asset_size: 9657,
    asset_dimensions: "168x38",
    asset_alt_text: "Consumer Reviews - Sitejabber",
    asset_dimensions_on_page: "168x38",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.00487060546875,
  },
  {
    status: "success",
    ads_success: false,
    asset: "https://puppies.com/store/wp-content/uploads/2024/07/dogtoys.jpg",
    asset_alt_text: "",
    asset_dimensions_on_page: "715x717",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.391124725341797,
  },
];
Collect Videos (asset_collect_videos)

Collect Videos will extract all the video(s) from a given URL, alongside metadata specific to the video asset.

[
  {
    status: "success",
    ads_success: true,
    asset_collection_date: "2024-08-27T17:00:01.607+00:00",
    asset_dimensions_on_page: "337x225",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.057849884033203125,
    video_url:
      "https://vp.nyt.com/video/2024/08/26/122749_1_chimp-crazy-PROMO_wg_720p.mp4",
  },
  {
    status: "success",
    ads_success: true,
    asset_collection_date: "2024-08-27T17:00:03.215+00:00",
    asset_dimensions_on_page: "522x348",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.138592529296875,
    video_url:
      "https://vp.nyt.com/video/2024/08/27/122761_1_27vid-Ukraine_wg_1080p.mp4",
  },
];
Detect Video Multi-Play (video_detect_multi_play)

Detect Video Multi-Play will determine whether a URL has multiple video assets playing at the same time, including metadata specific to the video content itself.

[
  {
    status: "success",
    ads_success: true,
    multi_active_video: true,
    single_active_video: false,
    videos: [
      {
        start: "2024-08-11T13:46:59.810+00:00",
        duration: 82.48,
        asset_url:
          "blob:https://tettybetty.com/ef4966e8-c51c-4fa3-98f0-78bf684fcc69",
        origin_url: "https://tettybetty.com/",
        frame_title:
          "Each of These Rare Historical Photos Has a Unique Story to Tell",
        frame_url: "https://tettybetty.com/each-of-these-rare-historical-vs",
        resolution: "640x360",
        end: "2024-08-11T13:47:43.823+00:00",
      },
      {
        start: "2024-08-11T13:47:41.215+00:00",
        duration: 76.0,
        asset_url:
          "blob:https://tettybetty.com/a1dfcdf2-8a5e-4787-af1f-033c35fce9bc",
        origin_url: "https://tettybetty.com/",
        frame_title:
          "Each of These Rare Historical Photos Has a Unique Story to Tell",
        frame_url: "https://tettybetty.com/each-of-these-rare-historical-vs#4",
        resolution: "640x360",
        end: "2024-08-11T13:47:43.823+00:00",
      },
    ],
    video_urls: [
      "blob:https://tettybetty.com/ef4966e8-c51c-4fa3-98f0-78bf684fcc69",
      "blob:https://tettybetty.com/a1dfcdf2-8a5e-4787-af1f-033c35fce9bc",
    ],
    video_durations: [82.48, 76.0],
  },
];
Collect URLs (asset_collect_urls)

Collect Videos will extract all the urls present within a given URL. This module can be used to enhance further PJs or for investigation purposes itself.

[
  {
    status: "success",
    ads_success: true,
    url_count: 5,
    page_urls: [
      "https://gamingsmart.com/mouse-sensitivity-converter/#content",
      "https://gamingsmart.com/",
      "https://gamingsmart.com/sensitivity-calculators/",
      "https://gamingsmart.com/mouse-sensitivity-converter/",
      "https://gamingsmart.com/edpi-calculator/",
    ],
  },
];
Collect Images (all res) (asset_collect_all_res_images)

The Collect Images (all res) module will return all the images on a given URL and return the specific details from different viewport dimensions.

[
  {
    status: "success",
    ads_success: false,
    asset: "https://static.xx.fbcdn.net/rsrc.php/y1/r/4lCu2zih0ca.svg",
    asset_size: 2549,
    asset_dimensions: "1090x360",
    asset_alt_text: "Facebook",
    asset_viewability_by_resolution: {
      1: {
        dimension_on_page: { width: 240, height: 79 },
        percentage_in_view: 1.0,
        percentage_of_viewport: 0.018072840409956076,
      },
      2: {
        dimension_on_page: { width: 240, height: 79 },
        percentage_in_view: 1.0,
        percentage_of_viewport: 0.00822916666666667,
      },
      3: {
        dimension_on_page: { width: 240, height: 79 },
        percentage_in_view: 1.0,
        percentage_of_viewport: 0.0146296296296296,
      },
      4: {
        dimension_on_page: { width: 240, height: 79 },
        percentage_in_view: 1.0,
        percentage_of_viewport: 0.014286747685185185,
      },
      5: {
        dimension_on_page: { width: 240, height: 79 },
        percentage_in_view: 1.0,
        percentage_of_viewport: 0.02410888671875,
      },
      (truncated...)
    },
    asset_dimensions_on_page: "240x79",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.01446533203125,
  }
];
Get Video Players (video_check_players)

Check Video Players will check whether a video player(s) is present on a given URL, alongside metadata specific to the video content on the page.

[
  {
    status: "success",
    ads_success: true,
    player: "JW Player",
    src: "https://gcdn.2mdn.net/videoplayback/id/a3ab38fe7fd5746e/itag/342/source/web_video_ads/xpc/EgVovf3BOg%3D%3D/ctier/L/acao/yes/ip/0.0.0.0/ipbits/0/expire/1763054539/sparams/ip,ipbits,expire,id,itag,source,xpc,ctier,acao/signature/A2C045EE581EC4AC5AEDFD9FE70E6843C906B69A.33EC0C96BCF8C58D6699F2B18115E969DD9F92C0/key/ck2/file/file.mp4#t=1.2",
    muted: false,
    expand: true,
    autoplay: false,
    percentage_of_viewport: null,
    dimensions: { width: 300, height: 169 },
  },
  {
    status: "success",
    ads_success: true,
    player: "JW Player",
    src: "https://gcdn.2mdn.net/videoplayback/id/a3ab38fe7fd5746e/itag/342/source/web_video_ads/xpc/EgVovf3BOg%3D%3D/ctier/L/acao/yes/ip/0.0.0.0/ipbits/0/expire/1763054539/sparams/ip,ipbits,expire,id,itag,source,xpc,ctier,acao/signature/72B04349B668FA9522DFEE82E77D063EAF1C57C5.ACED4315A4240E5A5F707CD9EB71DC868988237D/key/ck2/file/file.mp4#t=1.2",
    muted: false,
    expand: true,
    autoplay: false,
    percentage_of_viewport: null,
    dimensions: { width: 300, height: 169 },
  },
];
Check Video.plcmt Agreement (pbjs_check_video_plcmt_agreement)

Checks whether a video player has agreement on the video.plcmt signal.

[
  {
    status: "success",
    ads_success: true,
    in_agreement: 3,
    disputed: 2,
    disputed_gpids: [
      "/5e0e296628a061270b21ccab/65141cedb61c5de42104a8f8/www.foxnews.com",
    ],
    outlier_bidders: [
      "triplelift",
      "criteo_2",
      "ix",
      "criteo_3",
      "criteo_5",
      "criteo",
      "criteo_4",
    ],
  },
];
Visit and Get Brand URL (demand_visit_and_get_brand_url)

Visit a given URL and get the underlying brand URL (based on click through) as well as the Google Ad Product Category Identifier.

[
  {
    status: "success",
    ads_success: true,
    name: "mtv.co.uk",
    canonical_domain: "mtv.co.uk",
    detected_count: 2,
    ad_product_category_id: 10103,
  },
];
Save Images (asset_store_images)

Similar to Collect Images, but in this case Sincera will save a copy of the image to an AWS S3 bucket, as opposed to passing only URL references. Files are retained for 14 days before expiring.

[
  {
    status: "success",
    ads_success: true,
    asset: "",
    asset_alt_text: "Where is HGTV Urban Oasis 2024?",
    asset_dimensions_on_page: "988x556",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.41910400390625,
    stored_url: null,
  },
  {
    status: "success",
    ads_success: true,
    asset: "",
    asset_alt_text: "100 Day Dream Home",
    asset_dimensions_on_page: "807x538",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.33124237060546874,
    stored_url: null,
  },
  {
    status: "success",
    ads_success: true,
    asset: "",
    asset_alt_text: "See HGTV Urban Oasis 2024 After Construction",
    asset_dimensions_on_page: "807x538",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.33124237060546874,
    stored_url: null,
  },
  (truncated...)
];
Save Videos (asset_store_videos)

Similar to Collect Videos, but in this case Sincera will save a copy of the video asset to an AWS S3 bucket, as opposed to passing only URL references. Files are retained for 14 days before expiring.

[
  {
    status: "success",
    ads_success: true,
    asset_collection_date: "2024-08-16T19:23:13.945+00:00",
    asset_dimensions_on_page: "445x250",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.0848770141601562,
    video_url:
      "https://cdn.3lift.com/video/a9ed7bae-4017-4977-a31b-a3d9f6f461a3.mp4",
    stored_url:
      "https://sincera-publisher-assets.s3.amazonaws.com/videos/f8a2ce9c-08e4-4475-934d-7d6e56f0eb54/a9ed7bae-4017-4977-a31b-a3d9f6f461a3.mp4",
  },
  {
    status: "success",
    ads_success: true,
    asset_collection_date: "2024-08-16T19:23:14.677+00:00",
    asset_dimensions_on_page: "298x168",
    asset_percentage_in_view: 1.0,
    asset_percentage_of_viewport: 0.03819580078125,
    video_url:
      "https://cdn.3lift.com/video/a9ed7bae-4017-4977-a31b-a3d9f6f461a3.mp4",
    stored_url:
      "https://sincera-publisher-assets.s3.amazonaws.com/videos/21c7a8aa-b3db-4e0d-90f8-00c8087803f4/a9ed7bae-4017-4977-a31b-a3d9f6f461a3.mp4",
  },
];
Collect Minimal Text (asset_collect_minimal_text)

This returns a much smaller payload than collect_text - specifically, it will return structured metadata about the page (keywords, description, language) but it will not return the freeform text content found on the property.

[
  {
    status: "success",
    ads_success: true,
    page_language: "en-gb",
    page_description:
      "Localize / Custom. Try to keep it under 250 characters and include episode content.",
    page_keywords: null,
    page_type: "website",
    page_title: "News - Entertainment, Movies, Celebrity & Music | MTV UK",
    article_excerpt:
      "Localize / Custom. Try to keep it under 250 characters and include episode content.",
  },
];
Identity

Identity modules gather and format metadata specific to identifiers detected on page. Documentation is refreshed whenever new identifiers are verified within the Sincera platform.

Unified ID 2.0 (identity_check_uid2_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 199,
    id_name: "UID2",
    uid_resources_found: "true",
    detected_via: "js",
    last_detected: "2024-08-14",
    relationship: "third_party",
  },
];
LiveRamp ATS (identity_check_ats_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 255,
    id_name: "ATS",
    ats_resources_found: "false",
    detected_via: "js",
    last_detected: "2024-08-14",
    relationship: "third_party",
  },
];
ID5 (identity_check_id5_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 270,
    id_name: "ID5",
    detected_via: "network_call",
    last_detected: "2024-08-14",
    relationship: "third_party",
  },
];
Lotame Panorama (identity_check_panorama_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 283,
    id_name: "Panorama",
    detected_via: "local_storage",
    last_detected: "2024-08-14",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 283,
    id_name: "Panorama",
    detected_via: "first_party_cookie",
    last_detected: "2024-08-14",
  },
];
Zeotap ID (identity_check_zeotap_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 271,
    id_name: "ID+",
    idp_resources_found: "false",
    detected_via: "js",
    last_detected: "2024-04-19",
    relationship: "third_party",
  },
];
Novatiq ID (identity_check_novatiq_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 653,
    id_name: "Hyper ID",
    detected_via: "network_call",
    last_detected: "2024-04-19",
    relationship: "third_party",
  },
];
IM UID (identity_check_im_uid)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 649,
    id_name: "IM-UID",
    detected_via: "cookies",
    last_detected: "2024-08-14",
    relationship: "third_party",
  },
];
33Across ID (identity_check_33across_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 2,
    id_name: "Lexicon",
    detected_via: "local_storage",
    last_detected: "2024-08-14",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 2,
    id_name: "Lexicon",
    detected_via: "network_call",
    last_detected: "2024-08-14",
    relationship: "third_party",
  },
];
Liveintent ID (identity_check_liveintent_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 12,
    id_name: "NonID",
    detected_via: "js",
    last_detected: "2024-08-14",
    relationship: "third_party",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 12,
    id_name: "NonID",
    detected_via: "local_storage",
    last_detected: "2024-08-14",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 12,
    id_name: "NonID",
    detected_via: "network_call",
    last_detected: "2024-08-14",
    relationship: "third_party",
  },
];
NeuStar Fabrick ID (identity_check_fabrick_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 280,
    id_name: "Fabrick",
    detected_via: "local_storage",
    last_detected: "2024-08-14",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 280,
    id_name: "Fabrick",
    detected_via: "network_call",
    last_detected: "2024-08-14",
    relationship: "third_party",
  },
];
Ftrack ID (identity_check_ftrack_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 280,
    id_name: "Fabrick",
    idp_resources_found: "false",
    detected_via: "first_party_cookie",
    last_detected: "2024-04-19",
    relationship: "third_party",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 280,
    id_name: "Fabrick",
    detected_via: "network_call",
    last_detected: "2024-04-19",
    relationship: "third_party",
  },
];
PPID usage (adserver_check_ppid)
[
  {
    status: "success",
    ads_success: true,
    PPID: true,
  },
];
GAM Encrypted Signals (adserver_check_ess)
[
  {
    status: "success",
    ads_success: true,
    provider: "id5-sync.com",
    javascript_source: null,
  },
  {
    status: "success",
    ads_success: true,
    provider: "rtbhouse",
    javascript_source:
      "https://invstatic101.creativecdn.com/encrypted-signals/encrypted-tag-g.js",
  },
  {
    status: "success",
    ads_success: true,
    provider: "pubcid.org",
    javascript_source: null,
  },
  {
    status: "success",
    ads_success: true,
    provider: "33across.com",
    javascript_source: null,
  },
  {
    status: "success",
    ads_success: true,
    provider: "uidapi.com",
    javascript_source: "https://cdn.prod.uidapi.com/uid2SecureSignal.js",
  },
];
Utiq ID (identity_check_utiq)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 812,
    id_name: "Utiq",
    detected_via: "Prebid",
    last_detected: "2024-04-19",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 812,
    id_name: "Utiq",
    detected_via: "js",
    last_detected: "2024-04-19",
  },
];
IntentIq ID (identity_check_intentiq_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 558,
    id_name: "IntentIQ",
    detected_via: "local_storage",
    last_detected: "2024-08-14",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 558,
    id_name: "IntentIQ",
    detected_via: "js",
    last_detected: "2024-08-14",
  },
];
European Unified ID (identity_check_euid_id)
[
  {
    status: "success",
    ads_success: true,
    ad_system_id: 199,
    id_name: "EUID",
    detected_via: "js",
    last_detected: "2024-10-29",
    relationship: "third_party",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 199,
    id_name: "EUID",
    detected_via: "file",
    last_detected: "2024-10-29",
    relationship: "third_party",
  },
  {
    status: "success",
    ads_success: true,
    ad_system_id: 199,
    id_name: "EUID",
    detected_via: "network_call",
    last_detected: "2024-10-29",
    relationship: "third_party",
  },
];
Ad Configuration

Ad configuration modules gather and format site content specific to ad unit slot configurations.

Count Ad Slots (adserver_count_slots)

This simple module will return an integer of the number of ad slots that are detected on a given URL. This module uses a count of Ad Units that are defined on the page, and not necessarily rendered. If you’d like to see the rendered Ad Units, consider using the ad_unit_coordinates module. Note that while Google Ad Manager is the most popular adserver, Count Slots is compatible with all major ad servers.

[
  {
    status: "success",
    ads_success: true,
    total_slots: 1,
  },
];
Collect Ad Slots (adserver_get_slots)

This module will provide an array of all ad unit slots on the page specific to their unit path, element ID, and respective ad slot sizes.

[
  {
    status: "success",
    ads_success: true,
    6: [
      {
        slotElementId: "aswift_1_host",
        sizes: [[907, 280]],
      },
      {
        slotElementId: "aswift_0_host",
        sizes: [[0, 0]],
      },
    ],
  },
];
Get Ad Slot Coordinates (adserver_get_ad_slot_coordinates)

This module will return the coordinates of the ad units that are detected on a given URL. As this requires the Ad Units to be written to the DOM and rendered, it’s possible this could have a different count of Ad Units versus the count_ad_slots module. With this result data + viewport size, Sincera users can effectively re-create the layout of a given URL.

[
  {
    "status": "success",
    "ads_success": true,
    "ad_units": [
      {
        "ad_unit": "div-gpt-ad-1111111111111-1",
        "ad_element_id": "div-gpt-ad-1111111111111-1",
        "ad_unit_path": "/1011785/Unica.ro_Async/580x400_300x250_unica_intext",
        "inferred_gpid": "/1011785/Unica.ro_Async/580x400_300x250_unica_intext#div-gpt-ad-1111111111111-1",
        "ad_unit_size": {
          "height": 250,
          "width": 580
        },
        "coordinates": {
          "top": 2223,
          "bottom": 2473,
          "left": 205,
          "right": 785
        }
      },
      {
        "ad_unit": "div-gpt-ad-1111111111111-2",
        "ad_element_id": "div-gpt-ad-1111111111111-2",
        "ad_unit_path": "/1011785/Unica.ro_Async/580x400_300x250_unica_intext_p2",
        "inferred_gpid": "/1011785/Unica.ro_Async/580x400_300x250_unica_intext_p2#div-gpt-ad-1111111111111-2",
        "ad_unit_size": {
          "height": 250,
          "width": 580
        },
        "coordinates": {
          "top": 2851,
          "bottom": 3101,
          "left": 205,
          "right": 785
        }
      }
  }
];
Get Adserver Key Values (adserver_check_page_kvs)

This module is used to collect all of the key value pairs that are passed into Google Ad Manager via the GPT call.

[
  {
    status: "success",
    ads_success: true,
    keyvalues: {
      section: ["news"],
      site_region: [""],
    },
  },
];
Detect Auto-Refresh Ad Slots (adserver_check_refresh)

Similar to Wait + Detect Auto-Refresh Ad Slots, with the exception that this module will not wait to watch for a refresh, it will simply observe if one has occurred during the visit to a given URL. Useful for Private Jobs that have many modules enabled and don’t require any additional wait time.

[
  {
    status: "success",
    ads_success: true,
    refreshed_slots: 1,
    average_refresh_rate: 50,
    minimum_refresh_rate: 50,
    maximum_refresh_rate: 50,
    refresh_sources: [
      "https://ads-static.conde.digital/production/cns/builds/wired/v6.js",
    ],
  },
];
Wait + Detect Auto-Refresh Ad Slots (adserver_sleep_then_check_refresh)

This module provides metadata related to whether ads on a given publisher URL refreshes, at what frequency, in seconds.

[
  {
    status: "success",
    ads_success: true,
    refreshed_slots: 2,
    average_refresh_rate: 60,
    minimum_refresh_rate: 60,
    maximum_refresh_rate: 60,
    refresh_sources: [
      "https://btg.mtvnservices.com/aria/bentojs.js?site=webplex-mtv-uk&v=3.2.0",
      "https://www.mtv.co.uk/news",
    ],
  },
];
Ads to Content Ratio (A2CR) (adserver_ads_to_content_ratio)

Ads to Content Ratio will provide aggregated metrics related to ad density (or ratio of ads on page) for a publisher, compared to its editorial content.

Field Data Type Definition
status STRING Returns success or error-x depending on the outcome of the visit
ads_success BOOLEAN This field will return true or false if any ads are detected on the page
avg_ads_to_content_ratio FLOAT The average A2CR when looking at all the viewports
max_ads_to_content_ratio FLOAT The maximum A2CR when looking at all the viewports
avg_ad_units_in_view FLOAT The average number of ads in view when looking at all the viewports
max_ad_units_in_view INT The maximum number of ads in view in any of the viewports

Example Payload:

[
  {
    status: "success",
    ads_success: true,
    avg_ads_to_content_ratio: 0.12203,
    max_ads_to_content_ratio: 0.252,
    avg_ad_units_in_view: 0.83333,
    max_ad_units_in_view: 1.0,
  },
];
Detailed A2CR (adserver_detailed_ads_to_content_ratio)

This module uses the same underlying functionality as the standard ads_to_content_ratio module, but returns very granular data. Specifically, the module will return the A2CR, ads-in-view, and ad overlap for each “depth” value. Depth is defined as a viewport-sized vertical scroll. This allows much greater precision in determining a property’s ad experience, as the ad load vary significantly by scroll depth.

Field Data Type Definition
status STRING Returns success or error-x depending on the outcome of the visit
ads_success BOOLEAN This field will return true or false if any ads are detected on the page
avg_ads_to_content_ratio FLOAT The average A2CR when looking at all the viewports
max_ads_to_content_ratio FLOAT The maximum A2CR when looking at all the viewports
avg_ad_units_in_view FLOAT The average number of ads in view when looking at all the viewports
max_ad_units_in_view FLOAT The maximum number of ads in view in any of the viewports
min_ads_to_content_ratio FLOAT The minimum A2CR when looking at all the viewports
depth_*_ads_to_content_ratio FLOAT The A2CR for the given viewport
depth_*_ads_in_view INT The number of ads in view at the given viewport
depth_*_overlap BOOLEAN A boolean describing if the given viewport had ads overlapping

Example Payload:

[
  {
    status: "success",
    ads_success: true,
    avg_ads_to_content_ratio: 0.12335,
    max_ads_to_content_ratio: 0.252,
    avg_ad_units_in_view: 0.83333,
    max_ad_units_in_view: 1.0,
    min_ads_to_content_ratio: 0.0,
    depth_1_ads_to_content_ratio: 0.252,
    depth_1_ads_in_view: 1.0,
    depth_1_overlap: false,
    depth_2_ads_to_content_ratio: 0.0787,
    depth_2_ads_in_view: 1.0,
    depth_2_overlap: false,
    depth_3_ads_to_content_ratio: 0.0787,
    depth_3_ads_in_view: 1.0,
    depth_3_overlap: false,
    depth_4_ads_to_content_ratio: 0.252,
    depth_4_ads_in_view: 1.0,
    depth_4_overlap: false,
    depth_5_ads_to_content_ratio: 0.0,
    depth_5_ads_in_view: 0,
    depth_5_overlap: false,
    depth_6_ads_to_content_ratio: 0.0787,
    depth_6_ads_in_view: 1.0,
    depth_6_overlap: false,
  },
];
Count Rendered Ad Slots (adserver_count_rendered_ad_units)

This module will provide a count of ad slots that have rendered on page. This is different from count_slots, which returns the count of ad slots defined by the adserver. Typically, Count Rendered Ad Slots is more reliable.

[
  {
    status: "success",
    ads_success: true,
    rendered_ad_units: 7,
  },
];
Video Ads to Content (video_a2cr_video)

Similar to the Ads to Content ratio module above, this module will provide an overall A2CR as well as provide relevant video player metadata.

Field Data Type Definition
status STRING Returns success or error-x depending on the outcome of the visit
ads_success BOOLEAN This field will return true or false if any ads are detected on the page
ads_detected BOOLEAN  
ads_to_content_ratio FLOAT The A2CR of the video
max_video_playing FLOAT The maximum number of videos playing at a given time
players List of Objects A list of objects containing data about the video players found
players[*].frame_title STRING The title of the video player frame
players[*].player_title STRING The title of the video player
players[*].origin_url STRING The URL that called the video player appeared on
players[*].asset_url STRING The URL of the video playing
players[*].duration INT The duration of the video asset

Example Payload:

[
  {
    status: "success",
    ads_success: true,
    ads_detected: true,
    ads_to_content_ratio: 1.0,
    max_video_playing: 4,
    players: [
      {
        frame_title: "",
        player_title: "28A73A50D4A85589060AB7F15B128F56",
        origin_url: "https://cafemom.com/",
        asset_url:
          "https://cache-ssl.celtra.com/api/videoStream/fb8ffba3defb3af3a1f53596bac8eece5eb1f6d7bedcd8f5d1b778e991a86ca7/vp9_served_480p/video.webm?transform=VideoStream&celtraCacheBust=32-1",
        duration: 15,
      },
      {
        frame_title: "",
        player_title: "CBCF87DB8B5ABD9F6304CB86DF0F0A22",
        origin_url: "https://cafemom.com/",
        asset_url:
          "https://cache-ssl.celtra.com/api/videoStream/fb8ffba3defb3af3a1f53596bac8eece5eb1f6d7bedcd8f5d1b778e991a86ca7/vp9_served_480p/video.webm?transform=VideoStream&celtraCacheBust=32-1",
        duration: 15,
      },
      {
        frame_title: "",
        player_title: "ADD949546BD7F895D7B8823D89613AC0",
        origin_url: "https://cafemom.com/",
        asset_url:
          "https://cache-ssl.celtra.com/api/videoStream/fb8ffba3defb3af3a1f53596bac8eece5eb1f6d7bedcd8f5d1b778e991a86ca7/vp9_served_480p/video.webm?transform=VideoStream&celtraCacheBust=32-1",
        duration: 15,
      },
      {
        frame_title: "",
        player_title: "002452928C739CF75A3F031DEF21093B",
        origin_url: "https://cafemom.com/",
        asset_url:
          "https://cache-ssl.celtra.com/api/videoStream/fb8ffba3defb3af3a1f53596bac8eece5eb1f6d7bedcd8f5d1b778e991a86ca7/vp9_served_480p/video.webm?transform=VideoStream&celtraCacheBust=32-1",
        duration: 15,
      },
      {
        frame_title: "",
        player_title: "061C0DF237F474E7E012E088E3ECA5F2",
        origin_url: "https://cafemom.com/",
        asset_url:
          "https://cache-ssl.celtra.com/api/videoStream/fb8ffba3defb3af3a1f53596bac8eece5eb1f6d7bedcd8f5d1b778e991a86ca7/vp9_served_480p/video.webm?transform=VideoStream&celtraCacheBust=32-1",
        duration: 15,
      },
      {
        frame_title: "",
        player_title: "17A2094E52DE2B96DD5D415619935388",
        origin_url: "https://cafemom.com/",
        asset_url:
          "https://cache-ssl.celtra.com/api/videoStream/fb8ffba3defb3af3a1f53596bac8eece5eb1f6d7bedcd8f5d1b778e991a86ca7/vp9_served_480p/video.webm?transform=VideoStream&celtraCacheBust=32-1",
        duration: 15,
      },
      {
        frame_title: "",
        player_title: "5AAEED6786ABC0E78B64355A9597F7D1",
        origin_url: "https://cafemom.com/",
        asset_url:
          "https://cache-ssl.celtra.com/api/videoStream/fb8ffba3defb3af3a1f53596bac8eece5eb1f6d7bedcd8f5d1b778e991a86ca7/vp9_served_480p/video.webm?transform=VideoStream&celtraCacheBust=32-1",
        duration: 15,
      },
    ],
  },
];
Wait & Detect Slot Refresh (Slot Level) (adserver_sleep_then_check_refresh_detailed)

Similar to Wait + Detect Auto-Refresh Ad Slots, this module will provide additional details related to which ad units refresh when observed during the visit to a given URL. Useful for Private Jobs that have many modules enabled and don’t require any additional wait time.

[
  {
    status: "success",
    ads_success: true,
    GAM: {
      hasRefresh: true,
      refreshSlots: [
        {
          inferred_gpid: "/342026871/Imgur/Home/InContent/1/Desktop#Posthome-7",
          ad_unit_path: "/342026871/Imgur/Home/InContent/1/Desktop",
          ad_element_id: "Posthome-7",
          sources: ["https://js.assemblyexchange.com/wana.5.5.1.js"],
          refreshCount: 3,
          refreshRate: 30,
          refreshOutOfViewport: true,
        },
        {
          inferred_gpid:
            "/342026871/Imgur/Home/InContent/2/Desktop#Posthome-12",
          ad_unit_path: "/342026871/Imgur/Home/InContent/2/Desktop",
          ad_element_id: "Posthome-12",
          sources: ["https://js.assemblyexchange.com/wana.5.5.1.js"],
          refreshCount: 3,
          refreshRate: 30,
          refreshOutOfViewport: true,
        },
        {
          inferred_gpid:
            "/342026871/Imgur/Home/InContent/3/Desktop#Posthome-17",
          ad_unit_path: "/342026871/Imgur/Home/InContent/3/Desktop",
          ad_element_id: "Posthome-17",
          sources: ["https://js.assemblyexchange.com/wana.5.5.1.js"],
          refreshCount: 3,
          refreshRate: 30,
          refreshOutOfViewport: true,
        },
        {
          inferred_gpid:
            "/342026871/Imgur/Home/InContent/1/Desktop#Posthome-27",
          ad_unit_path: "/342026871/Imgur/Home/InContent/1/Desktop",
          ad_element_id: "Posthome-27",
          sources: ["https://js.assemblyexchange.com/wana.5.5.1.js"],
          refreshCount: 2,
          refreshRate: 30,
          refreshOutOfViewport: true,
        },
        {
          inferred_gpid:
            "/342026871/Imgur/Home/InContent/2/Desktop#Posthome-32",
          ad_unit_path: "/342026871/Imgur/Home/InContent/2/Desktop",
          ad_element_id: "Posthome-32",
          sources: ["https://js.assemblyexchange.com/wana.5.5.1.js"],
          refreshCount: 2,
          refreshRate: 30,
          refreshOutOfViewport: true,
        },
      ],
    },
  },
];
Detect Chumbox (adserver_chumbox_detection)

Detects the type of online advertising that uses a grid of captions and thumbnails to direct traffic to other websites and webpages (i.e. native ad networks like Taboola and Outbrain).

[
  {
    status: "success",
    ads_success: true,
    chumbox_providers: ["Outbrain"],
  },
];
Detect Out of View Ad Render (adserver_get_ad_request_events)

Detects whether or not a placement (as represented by the inferred_gpid) is being rendered outside of the current view, (i.e. below the fold). It also includes the adserver, size, and a Media Rating Council viewability metric.

[
  {
    status: "success",
    ads_success: true,
    ad_requests: {
      ad_request_events: [
        {
          inferred_gpid: "/5349/ta.ta.com.s/homepage#slot:728x90:inline1",
          loads_out_of_view: true,
          adserver: "GAM",
          size: "728x90",
          mrc_viewable: false,
        },
        {
          inferred_gpid: "/5349/ta.ta.com.s/homepage#slot:3x3:InlineNova",
          loads_out_of_view: true,
          adserver: "GAM",
          size: "0x0",
          mrc_viewable: false,
        },
        {
          inferred_gpid: "/5349/ta.ta.com.s/homepage#slot:728x90:inline2",
          loads_out_of_view: true,
          adserver: "GAM",
          size: "728x90",
          mrc_viewable: false,
        },
      ],
      lazy_load_settings: { enabled: false, settings: {} },
    },
  },
];
Pre and Post Scroll Activity (enviro_page_weight_before_after_scroll)

Detects any changes in a publisher’s environment + ad experience before and after scrolling. This is helpful in understanding whether or not the publisher is offering a graceful ad experience, as well as balancing out of view ad loads (which are less desirable to buyers.)

[
  {
    status: "success",
    ads_success: true,
    initial_weight: {
      page_weight: 18793842,
      cpu: 6.539479,
      network_calls: { total_calls_count: 279, unique_hosts_count: 84 },
      ad_render_count: 5,
    },
    ending_weight: {
      page_weight: 18794512,
      cpu: 7.068985,
      network_calls: { total_calls_count: 282, unique_hosts_count: 84 },
      ad_render_count: 5,
    },
    page_height: 2426,
  },
];
Get Sticky Ads Placements (adserver_sticky_ads_detection)

This module detects whether sticky video or display ads are present on a given URL. Sticky ads are ads that remain visible as the user scrolls down the page, often running in a fixed position alongside the content, within an iframe.

[
  {
    status: "success",
    ads_success: true,
    sticky_ads: true,
    sticky_video: true,
    sticky_ad_placements: [
      {
        ad_element_id: "acm-ad-tag-lawrence_dfp_desktop_skin",
        ad_unit_path: "/7103/SMG_Q_OO/skin/sports/main/draftwire",
        gpid: "/7103/SMG_Q_OO/skin/sports/main/draftwire#acm-ad-tag-lawrence_dfp_desktop_skin",
        ad_unit_size: {
          height: 1024,
          width: 1280,
        },
      },
      {
        ad_element_id: "acm-ad-tag-lawrence_dfp_desktop_top",
        ad_unit_path: "/7103/SMG_Q_OO/728x90_flex/sports/main/draftwire",
        gpid: "/7103/SMG_Q_OO/728x90_flex/sports/main/draftwire#acm-ad-tag-lawrence_dfp_desktop_top",
        ad_unit_size: {
          height: 1457,
          width: 1280,
        },
      },
    ],
    sticky_video_placements: [
      {
        player: "AnyClip",
        src: "https://draftwire.usatoday.com/9f2a7d13-8d8e-4936-ae38-ebe13335b809",
        muted: true,
        autoplay: true,
        dimensions: {
          width: 699,
          height: 393,
        },
        percentage_of_viewport: 0.28691,
        shrink: true,
        shrink_dimensions: {
          width: 285,
          height: 160,
        },
      },
      {
        player: "video.js",
        src: "https://draftwire.usatoday.com/9f2a7d13-8d8e-4936-ae38-ebe13335b809",
        muted: true,
        autoplay: true,
        dimensions: {
          width: 699,
          height: 393,
        },
        percentage_of_viewport: 0.0434,
        shrink: true,
        shrink_dimensions: {
          width: 400,
          height: 225,
        },
      },
    ],
  },
];
Get Intrusive Ads Placements (adserver_intrusive_ads_detection)

This detects whether or not the publisher is using interstitial ad units on their property, which have a significant impact on browse-ability and user satisfaction. These are also perceived to be low ad quality by buyers, as it is frequently a whole page modal that could contain a single small ad creative.

[
  {
    status: "success",
    ads_success: true,
    intrusive_ads: true,
    slots: [{ ad_unit: "aswift_5_host", ad_element_id: "aswift_5_host" }],
  },
];
Collect Safeframe-Enabled Slots (adserver_get_safeframes)

This detects if a given GAM ad slot is rendered in a safe frame. This flag can be set at the time of ad render so it may change on each visit.

[
  {
    status: "success",
    ads_success: true,
    ad_element_id: "b2f0c529ba4a85eb769ad2fe3cd60172",
    ad_unit_path: "/5262/bloomberg/home/americas/phoenix/index",
    safeframe: false,
  },
  {
    status: "success",
    ads_success: true,
    ad_element_id: "645994445dfcd1f86774d5ed1b3e7b60",
    ad_unit_path: "/5262/bloomberg/home/americas/phoenix/index",
    safeframe: false,
  },
  {
    status: "success",
    ads_success: true,
    ad_element_id: "b6ab0fa3d49fdf42f0a3c29ea4241ced",
    ad_unit_path: "/5262/bloomberg/home/americas/phoenix/index",
    safeframe: false,
  },
  {
    status: "success",
    ads_success: true,
    ad_element_id: "6df95a638be1229d03cfc02a6b875b8b",
    ad_unit_path: "/5262/bloomberg/home/americas/phoenix/index",
    safeframe: true,
  },
  {
    status: "success",
    ads_success: true,
    ad_element_id: "acdd22ad6381e7322d3aa7e4dd37c3b8",
    ad_unit_path: "/5262/bloomberg/home/americas/phoenix/index",
    safeframe: true,
  },
];
Publisher Environment

Publisher environment modules provide rich metadata about a publisher’s configuration.

Detect JavaScript APIs (javascript_check_custom_js)

This module provides metadata as to a publisher’s use of JS from ad tech providers to make their inventory available for monetization.

[
  {
    status: "success",
    ads_success: false,
    tags_count: 15,
    js_tags: {
      googletag: "unknown",
      pako: "unknown",
      pbjsData: "unknown",
      __META_DATA__: { origin: "first party", hostname: "x.com" },
      __SCRIPTS_LOADED__: { origin: "first party", hostname: "x.com" },
      webpackChunk_twitter_responsive_web: {
        origin: "first party",
        hostname: "x.com",
      },
      __reactResponderSystemActive: {
        origin: "third party",
        hostname: "abs.twimg.com",
      },
      default_gsi: { origin: "third party", hostname: "accounts.google.com" },
      _F_toggles: { origin: "third party", hostname: "accounts.google.com" },
      google: { origin: "third party", hostname: "accounts.google.com" },
      __G_ID_CLIENT__: { origin: "third party", hostname: "abs.twimg.com" },
      closure_lm_154796: "unknown",
      AppleID: "unknown",
      regeneratorRuntime: "unknown",
      twttr: "unknown",
    },
  },
];
Detect Login Support (login_check_login)

This module provides metadata as to whether a publisher utilizes an auth provider to drive email sign-in for their content.

[
  {
    status: "success",
    ads_success: true,
    "auth provider": "Meta (Facebook)",
    "detected via": "one-hop link",
  },
  {
    status: "success",
    ads_success: true,
    "auth provider": "Meta (Facebook)",
    "detected via": "css selectors",
  },
  {
    status: "success",
    ads_success: true,
    "auth provider": "Meta (Facebook)",
    "detected via": "text match",
  },
  {
    status: "success",
    ads_success: true,
    "auth provider": "Google",
    "detected via": "one-hop link",
  },
  {
    status: "success",
    ads_success: true,
    "auth provider": "Google",
    "detected via": "css selectors",
  },
  {
    status: "success",
    ads_success: true,
    "auth provider": "Google",
    "detected via": "text match",
  },
  {
    status: "success",
    ads_success: true,
    "auth provider": "Apple",
    "detected via": "one-hop link",
  },
  {
    status: "success",
    ads_success: true,
    "auth provider": "Apple",
    "detected via": "text match",
  },
];
Page Weight (Megabytes) (enviro_page_weight)

This module will return the size (or “weight”) of a given URL, which is a signal that is closely correlated (inversely) with ad performance. If you’d like the results in bytes, make sure to use the “Page Weight (Bytes)” module.

[
  {
    status: "success",
    ads_success: true,
    page_weight: "7.5524 MB",
  },
];
Page Weight (Bytes) (enviro_page_weight_in_bytes)

This module will return the size (or “weight”) of a given URL, which is a signal that is closely correlated (inversely) with ad performance. If you’d like the results in Megabytes, make sure to use the “Page Weight (Megabytes)” module.

[
  {
    status: "success",
    ads_success: true,
    page_weight: "7552421",
  },
];
Count Network Calls (enviro_count_network_calls)

This is a simple module that will count the total network calls that are present on a given URL. A basic, yet useful heuristic for understanding how loaded a give publisher or URL is with cruft.

[
  {
    status: "success",
    ads_success: true,
    total_calls_count: "153",
    unique_hosts_count: "37",
  },
];
Detect Infinite Scroll (enviro_detect_infinite_scroll)

This module detects when the URL supports infinite scrolling, also known as “feed” style functionality. Note that URLs with Infinite Scroll can generate abnormally high ad unit counts due to the amount of distinct ad units that are created.

[
  {
    status: "success",
    ads_success: true,
    infinite_scroll_detected: false,
  },
];
Detect URL Swapping (enviro_detect_url_swapping)

The URL Swapping module detects when a publisher is changing (or “swapping”) the URL that is listed in the address bar, as the user scrolls content. This signal creates problems with both audience-based and contextual targeting, as the user has not explicitly visited this page, and has only passively arrived at the content.

[
  {
    status: "success",
    ads_success: true,
    url_swapping_detected: true,
  },
];
CPU Utilization (enviro_get_CPU)

This module will return the CPU usage of a given URL. This is a signal that is closely correlated (inversely) with ad performance. CPU usage is measured in terms of seconds of processor time.

[
  {
    status: "success",
    ads_success: false,
    CPU: 1.967856,
  },
];
Collect Network Traffic (domain_detect_domains)

This module will return the domains detected when the publisher URL is loaded. These signals, like CPU utilization, are also correlated to ad performance as its reflective of overall page load.

[
  {
    status: "success",
    ads_success: true,
    domains_count: 26,
    detected_domains: [
      "snaptik.app",
      "googletagmanager.com",
      "googlesyndication.com",
      "google-analytics.com",
      "doubleclick.net",
      "google.com",
      "googleapis.com",
      "gstatic.com",
      "googleadservices.com",
      "2mdn.net",
      "casalemedia.com",
      "adnxs.com",
      "pubpowerplatform.io",
      "pocpoc.io",
      "amazon-adsystem.com",
      "jsdelivr.net",
      "uidapi.com",
      "id5-sync.com",
      "33across.com",
      "creativecdn.com",
      "crwdcntrl.net",
      "criteo.net",
      "openxcdn.net",
      "yahoo.com",
      "4dex.io",
      "script.ac",
    ],
  },
];
Get Content Security Policy (policy_content_security_policy)

This module will return the domain’s Content Security Policy, if present.

[
  {
    "default-src": [
      "'self'",
      "blob:",
      "https://*.cnn.com:*",
      "http://*.cnn.com:*",
      "*.cnn.io:*",
      "*.cnn.net:*",
      "*.turner.com:*",
      "*.turner.io:*",
      "*.ugdturner.com:*",
      "courageousstudio.com",
      "*.vgtf.net:*",
    ],
    "script-src": ["'unsafe-eval'", "'unsafe-inline'", "'self'", "*"],
    "style-src": ["'unsafe-inline'", "'self'", "blob:", "*"],
    "child-src": ["'self'", "blob:", "*"],
    "frame-src": ["'self'", "*"],
    "object-src": ["'self'", "*"],
    "img-src": ["'self'", "data:", "blob:", "*"],
    "media-src": ["'self'", "data:", "blob:", "*"],
    "font-src": ["'self'", "data:", "*"],
    "connect-src": ["'self'", "data:", "*"],
    "frame-ancestors": [
      "'self'",
      "https://*.cnn.com:*",
      "http://*.cnn.com",
      "https://*.cnn.io:*",
      "http://*.cnn.io:*",
      "*.turner.com:*",
      "courageousstudio.com",
    ],
  },
];
HTTP Status Code (enviro_page_status_code)

This is a simple module that returns the HTTP status code (i.e. 2xx, 4xx, 5xx) of a given URL. This is a basic, yet useful heuristic for understanding the accessability of a given publisher or URL.

[
  {
    status: "success",
    ads_success: true,
    status_code: 200,
  },
];
```js
[
  {
    status: "success",
    ads_success: false,
    status_code: 200,
    url: "https://puppies.com/store/",
  },
];
Header Bidding

These signals can provide visibility into a publisher’s header wrapper configurations to contextualize how signals are shared for real-time bidding (RTB) activity.

Check APS (aps_check_aps)

Detect the presence of Amazon’s Publisher Solutions (APS) on a given URL. This module will return the APS version, if present.

[
  {
    status: "success",
    ads_success: true,
    aps_version: "24.806.2109",
    aps_status: true,
  },
];
Collect APS Bids (aps_collect_bids)

If APS is present, this module will return all of the bids that were issued to APS.

[
  {
    status: "success",
    ads_success: true,
    media_types: ["banner"],
    sizes: ["728x90", "970x250"],
    floor: null,
    floor_currency: null,
    identifiers: null,
    amazon_url: "https://www.esquire.com/",
    amazon_bid_request_id: "0",
    bid_timeout: "1000",
    bid_params: {
      si_section: "",
      device: {
        sua: {
          mobile: 0,
          source: 1,
          platform: { brand: "Chrome OS" },
          browsers: [
            { brand: "Google Chrome", version: ["117"] },
            { brand: "Not;A=Brand", version: ["8"] },
            { brand: "Chromium", version: ["117"] },
          ],
        },
      },
    },
    gdpr_status: { status: "no-cmp" },
  },
  {
    status: "success",
    ads_success: true,
    media_types: ["banner"],
    sizes: ["300x250", "300x600"],
    floor: null,
    floor_currency: null,
    identifiers: null,
    amazon_url: "https://www.esquire.com/",
    amazon_bid_request_id: "0",
    bid_timeout: "1000",
    bid_params: {
      si_section: "",
      device: {
        sua: {
          mobile: 0,
          source: 1,
          platform: { brand: "Chrome OS" },
          browsers: [
            { brand: "Google Chrome", version: ["117"] },
            { brand: "Not;A=Brand", version: ["8"] },
            { brand: "Chromium", version: ["117"] },
          ],
        },
      },
    },
    gdpr_status: { status: "no-cmp" },
  },
];
Check IX Library (ixlibrary_check_ix_library)

Detects the configuration for Index’s wrapper library, and associated modules.

[
  {
    status: "success",
    ads_success: true,
    user_modules: ["AdserverOrgIp", "LiveRampIp", "MerkleIp"],
    installed_modules: null,
    last_detected: "2024-08-15",
  },
];
Collect Prebid Wrappers (pbjs_get_pbjs_detected)

Detect the presence of Prebid’s js wrapper(s).

[
  {
    status: "success",
    ads_success: true,
    pbjs_wrappers: ["pbjs", "ihowpbjs"],
  },
];
Collect Prebid Configs (pbjs_get_prebid_config)

Gather metadata referencing a given prebid wrapper’s unique configuration (i.e. bidder timeout, auction delays). The config JSON object can contain a variable set of signals depending on the wrapper version/type, so please ensure you are integrating with that in mind.

[
  {
    status: "success",
    ads_success: true,
    pbjs_configs: [
      {
        pbjs: "pbjs",
        config: {
          debug: false,
          bidderTimeout: 3000,
          enableSendAllBids: true,
          useBidCache: false,
          deviceAccess: true,
          timeoutBuffer: 400,
          disableAjaxTimeout: false,
          maxNestedIframes: 10,
          priceGranularity: "custom",
          customPriceBucket: {
            buckets: [
              { precision: 2, max: 10, increment: 0.1, min: 0 },
              { precision: 2, max: 20, increment: 0.5 },
              { precision: 2, max: 78, increment: 1 },
            ],
          },
          mediaTypePriceGranularity: {},
          bidderSequence: "random",
          auctionOptions: {},
          userSync: {
            syncEnabled: true,
            filterSettings: {
              iframe: { bidders: ["criteo", "trustx"], filter: "exclude" },
              image: { bidders: ["criteo", "trustx"], filter: "include" },
            },
            syncsPerBidder: 0,
            syncDelay: 1000,
            auctionDelay: 0,
            topics: {
              maxTopicCaller: 3,
              bidders: [
                {
                  bidder: "pubmatic",
                  iframeURL:
                    "https://ads.pubmatic.com/AdServer/js/topics/topics_frame.html",
                  expiry: 7,
                },
                {
                  bidder: "appnexus",
                  iframeURL: "https://appnexus.com:8080/topics/fpd/topic.html",
                  expiry: 7,
                },
              ],
            },
            userIds: [
              {
                name: "identityLink",
                params: { pid: "13258", notUse3P: false },
                storage: {
                  type: "cookie",
                  name: "idl_env",
                  expires: 1,
                  refreshInSeconds: 1800,
                },
              },
              {
                name: "akamaiDAPId",
                params: {
                  apiHostname: "fox.dap.akadns.net",
                  apiVersion: "x1",
                  domain: "foxnews.com",
                  type: "dap-signature:1.0.0",
                },
              },
              {
                name: "unifiedId",
                params: {
                  url: "//match.adsrvr.org/track/rid?ttd_pid=edzz998&fmt=json",
                },
                storage: {
                  type: "cookie",
                  name: "pbjs-unifiedid",
                  expires: 60,
                },
              },
            ],
          },
          ortb2: { site: { mobile: 1 } },
          enableTIDs: true,
          consentManagement: {
            usp: {
              cmpApi: "static",
              consentData: { getUSPData: { uspString: "1---" } },
            },
          },
          fledgeForGpt: {
            enabled: true,
            bidders: ["rubicon"],
            defaultForSlots: 1,
          },
        },
        volatile: false,
      },
      {
        pbjs: "pbjs",
        config: {
          debug: false,
          bidderTimeout: 3000,
          enableSendAllBids: true,
          useBidCache: false,
          deviceAccess: true,
          timeoutBuffer: 400,
          disableAjaxTimeout: false,
          maxNestedIframes: 10,
          priceGranularity: "medium",
          customPriceBucket: {},
          mediaTypePriceGranularity: {},
          bidderSequence: "random",
          auctionOptions: {},
          userSync: {
            syncEnabled: true,
            filterSettings: { image: { bidders: "*", filter: "include" } },
            syncsPerBidder: 5,
            syncDelay: 3000,
            auctionDelay: 0,
          },
        },
        volatile: false,
      },
    ],
  },
];
Collect Prebid Modules (pbjs_get_installed_modules)

Gather metadata referencing a given prebid wrapper’s installed modules (i.e. identifiers, bidder adapters, etc.)

[
  {
    status: "success",
    ads_success: true,
    pbjs_installed_modules: [
      {
        pbjs: "pbjs",
        installed_modules: [
          "atsAnalyticsAdapter",
          "consentManagement",
          "consentManagementUsp",
          "enrichmentFpdModule",
          "fpdModule",
          "gdprEnforcement",
          "gptPreAuction",
          "identityLinkIdSystem",
          "sovrnBidAdapter",
          "teadsBidAdapter",
          "userId",
        ],
      },
    ],
  },
];
Collect Prebid Version (pbjs_get_pbjs_versions)

Provides data that corresponds to both the vendor / name of the unique prebid wrapper, as well as the version of the wrapper.

[
  {
    status: "success",
    ads_success: true,
    pbjs_versions: [
      { pbjs: "pbjs", version: "8.46.0" },
      { pbjs: "ihowpbjs", version: "8.30.0" },
    ],
  },
];
Collect Prebid GPIDs (pbjs_get_pbjs_gpids)

Contains both detection logic for Global Placement IDs (GPIDs) as well as the GPID values themselves. This is a basic module, with the more advanced GPID payload found in the detailed_gpid module.

[
  {
    status: "success",
    ads_success: true,
    pbjs_gpids: [
      {
        pbjs: "pbjs",
        gpids: [
          "/36117602/hdm-popularmechanics/homepage/atf/gpt_lb_a",
          "/36117602/hdm-popularmechanics/homepage/atf/gpt_gal_a",
          "/36117602/hdm-popularmechanics/homepage/breaker/gpt_lb_3",
          "/36117602/hdm-popularmechanics/homepage/breaker/gpt_gal_5",
          "/36117602/hdm-popularmechanics/homepage/breaker/gpt_lb_7",
        ],
      },
    ],
  },
];
Collect UserIds Configured in Prebid (pbjs_get_pbjs_user_ids)

Gather metadata referencing a given prebid wrapper’s user modules (i.e. identifiers). This signal could get suppressed by publishers who aim to prevent leakage, so there isn’t 100% overlap with installedModules.

[
  {
    status: "success",
    ads_success: true,
    pbjs_user_ids: [
      {
        pbjs: "pbjs",
        user_modules: ["identityLink", "pairId", "unifiedId", "sharedId"],
      },
    ],
  },
];
Collect Price Floors from Prebid Configuration (pbjs_get_pbjs_price_floors)

Gather metadata related to price floors found in a given prebid wrapper’s configuration. The values JSON object can contain a variable set of signals depending on the wrapper version/type, so please ensure you are integrating with that in mind.

[
  {
    status: "success",
    ads_success: true,
    pbjs_price_floors: [
      {
        pbjs: "pbjs",
        price_floors: {
          currency: "USD",
          skipRate: 0,
          schema: { fields: ["mediaType", "gptSlot"] },
          values: {
            "video|*": 8.4,
            "banner|/43459271/newsweek/sticky": 0.6,
            "banner|*": 0.72,
            "*|*": 0.72,
          },
          floorsSchemaVersion: 1,
        },
      },
    ],
  },
];
Collect First Party Data (SDA) from Prebid (pbjs_get_pbjs_fpd)

This is first party data (SDA) being sent via the fpd object in a given prebid wrapper’s configuration. The fpd JSON object can contain a variable set of signals depending on the wrapper version/type, so you should expect the payload structure to change from publisher to publisher.

[
  {
    status: "success",
    ads_success: true,
    pbjs_fpd: [
      {
        pbjs: "pbjs",
        fpd: {
          site: {
            cat: [
              "464",
              "472",
              "1",
              "596",
              "469",
              "239",
              "599",
              "638",
              "274",
              "201",
              "248",
              "286",
              "552",
              "652",
              "52",
              "254",
              "553",
              "32",
              "90",
            ],
            cattax: 7,
            content: {
              data: [
                {
                  ext: { segtax: 7 },
                  name: "verity",
                  segment: [
                    { id: "464" },
                    { id: "472" },
                    { id: "1" },
                    { id: "596" },
                    { id: "469" },
                    { id: "239" },
                    { id: "599" },
                    { id: "638" },
                    { id: "274" },
                    { id: "201" },
                    { id: "248" },
                    { id: "286" },
                    { id: "552" },
                    { id: "652" },
                    { id: "52" },
                    { id: "254" },
                    { id: "553" },
                    { id: "32" },
                    { id: "90" },
                  ],
                },
              ],
            },
            pagecat: [
              "464",
              "472",
              "1",
              "596",
              "469",
              "239",
              "599",
              "638",
              "274",
              "201",
              "248",
              "286",
              "552",
              "652",
              "52",
              "254",
              "553",
              "32",
              "90",
            ],
            sectioncat: [
              "464",
              "472",
              "1",
              "596",
              "469",
              "239",
              "599",
              "638",
              "274",
              "201",
              "248",
              "286",
              "552",
              "652",
              "52",
              "254",
              "553",
              "32",
              "90",
            ],
          },
        },
      },
    ],
  },
];
Collect Prebid Bid Requests (pbjs_get_pbjs_bid_requests)

Returns a large payload that contains all Prebid Bid Request objects. This is a subset of data found in Prebid’s bidRequest event type. Note that the payload size will vary depending on when this module executes on a given visit.

[
  {
    status: "success",
    ads_success: true,
    pbjs_bid_requests: [
      {
        pbjs: "pbjs",
        bid_requests: [
          {
            mediaTypes: {
              banner: {
                pos: 1,
                sizes: [
                  [728, 90],
                  [970, 250],
                ],
              },
            },
            bidderCode: "ttd",
            sizes: [
              [728, 90],
              [970, 250],
            ],
            src: "client",
            params: {
              publisherId: "1",
              siteId: "hdm-popularmechanics",
              supplySourceId: "hearstmagazines",
            },
            ortb2Imp: {
              ext: {
                data: {
                  pbadslot:
                    "/36117602/hdm-popularmechanics/homepage/atf/gpt_lb_a",
                  avb: 45,
                  adserver: {
                    name: "gam",
                    adslot: "/36117602/hdm-popularmechanics/homepage/atf",
                  },
                },
                gpid: "/36117602/hdm-popularmechanics/homepage/atf/gpt_lb_a",
                tid: "27a74f00-0d0d-4352-ac5f-28cbafd4f55a",
                ae: 1,
              },
            },
          },
          {
            mediaTypes: {
              banner: {
                pos: 1,
                sizes: [
                  [300, 250],
                  [300, 600],
                ],
              },
            },
            bidderCode: "ttd",
            sizes: [
              [300, 250],
              [300, 600],
            ],
            src: "client",
            params: {
              publisherId: "1",
              siteId: "hdm-popularmechanics",
              supplySourceId: "hearstmagazines",
            },
            ortb2Imp: {
              ext: {
                data: {
                  pbadslot:
                    "/36117602/hdm-popularmechanics/homepage/atf/gpt_gal_a",
                  avb: 45,
                  adserver: {
                    name: "gam",
                    adslot: "/36117602/hdm-popularmechanics/homepage/atf",
                  },
                },
                gpid: "/36117602/hdm-popularmechanics/homepage/atf/gpt_gal_a",
                tid: "346623dc-cad1-48e6-8657-eb5ac5752f05",
                ae: 1,
              },
            },
          },
          {
            mediaTypes: {
              banner: {
                pos: 1,
                sizes: [
                  [728, 90],
                  [970, 250],
                ],
              },
            },
            bidderCode: "appnexus",
            sizes: [
              [728, 90],
              [970, 250],
            ],
            src: "client",
            params: {
              keywords: {
                adid: "gpt_lb_a",
                avb: 45,
                cat: "",
                sect: "",
                template: "landing",
              },
              position: "above",
              placement_id: "10583175",
            },
            ortb2Imp: {
              ext: {
                data: {
                  pbadslot:
                    "/36117602/hdm-popularmechanics/homepage/atf/gpt_lb_a",
                  avb: 45,
                  adserver: {
                    name: "gam",
                    adslot: "/36117602/hdm-popularmechanics/homepage/atf",
                  },
                },
                gpid: "/36117602/hdm-popularmechanics/homepage/atf/gpt_lb_a",
                tid: "27a74f00-0d0d-4352-ac5f-28cbafd4f55a",
                ae: 1,
              },
            },
          },
          {
            mediaTypes: {
              banner: {
                pos: 1,
                sizes: [
                  [300, 250],
                  [300, 600],
                ],
              },
            },
            bidderCode: "appnexus",
            sizes: [
              [300, 250],
              [300, 600],
            ],
            src: "client",
            params: {
              keywords: {
                adid: "gpt_gal_a",
                avb: 45,
                cat: "",
                sect: "",
                template: "landing",
              },
              position: "above",
              placement_id: "10583173",
            },
            ortb2Imp: {
              ext: {
                data: {
                  pbadslot:
                    "/36117602/hdm-popularmechanics/homepage/atf/gpt_gal_a",
                  avb: 45,
                  adserver: {
                    name: "gam",
                    adslot: "/36117602/hdm-popularmechanics/homepage/atf",
                  },
                },
                gpid: "/36117602/hdm-popularmechanics/homepage/atf/gpt_gal_a",
                tid: "346623dc-cad1-48e6-8657-eb5ac5752f05",
                ae: 1,
              },
            },
          },
          {
            mediaTypes: {
              banner: {
                pos: 1,
                sizes: [
                  [728, 90],
                  [970, 250],
                ],
              },
            },
            bidderCode: "triplelift",
            sizes: [
              [728, 90],
              [970, 250],
            ],
            src: "client",
            params: {
              floor: 0.01,
              inventoryCode: "popularmechanics_970x250_PB",
            },
            ortb2Imp: {
              ext: {
                data: {
                  pbadslot:
                    "/36117602/hdm-popularmechanics/homepage/atf/gpt_lb_a",
                  avb: 45,
                  adserver: {
                    name: "gam",
                    adslot: "/36117602/hdm-popularmechanics/homepage/atf",
                  },
                },
                gpid: "/36117602/hdm-popularmechanics/homepage/atf/gpt_lb_a",
                tid: "27a74f00-0d0d-4352-ac5f-28cbafd4f55a",
                ae: 1,
              },
            },
          },
          (truncated...)
        ],
      },
    ],
  },
];
Collect Prebid Bid Adjustments (pbjs_get_pbjs_bid_adjustments)

Gather metadata related to bid adjustments being sent via a given prebid wrapper’s configuration. This is a rich payload that is very useful in diagnosing gaps and finding opportunities for SSP Adapters in Prebid. Noteworthy scenarios include finding publishers who are incorrectly treating your bids as gross vs net (or vice versa), publishers who are modifying your bid incorrectly, or bids where you are encountering a custom floor.

The config JSON objects can contain a variable set of signals depending on the wrapper version/type, so please ensure you are integrating with that in mind.

[
  {
    status: "success",
    ads_success: true,
    pbjs_bid_adjustments: [
      {
        pbjs: "pbjs",
        bid_adjustments: [
          {
            bidderCode: "appnexus",
            adUnitCode: "gpt_lb_3",
            originalCpm: 0.010252,
            cpm: 0.010252,
            source: "client",
            adserverTargeting: {
              hb_bidder: "appnexus",
              hb_adid: "3080c9956ac0365",
              hb_pb: "0.00",
              hb_size: "970x250",
              hb_source: "client",
              hb_format: "banner",
              hb_adomain: "",
              hb_crid: 543837797,
            },
            meta: {
              dchain: { ver: "1.0", complete: 0, nodes: [{ bsid: "1212" }] },
              brandId: 7648,
            },
            transactionId: "e2b9ae5a-b786-41a5-9e41-71700287e9fa",
            netRevenue: true,
            originalCurrency: "USD",
            currency: "USD",
            pbAg: "0.00",
            pbCg: "0.00",
            pbDg: "0.01",
            pbLg: "0.00",
            pbMg: "0.00",
            pbHg: "0.01",
          },
          {
            bidderCode: "appnexus",
            adUnitCode: "gpt_gal_5",
            originalCpm: 1.01775,
            cpm: 1.01775,
            source: "client",
            adserverTargeting: {
              hb_bidder: "appnexus",
              hb_adid: "44f5c24102a9f64",
              hb_pb: "1.00",
              hb_size: "300x600",
              hb_source: "client",
              hb_format: "banner",
              hb_adomain: "",
              hb_crid: 509702191,
            },
            meta: {
              advertiserId: 5809777,
              dchain: { ver: "1.0", complete: 0, nodes: [{ bsid: "668" }] },
              brandId: 829794,
            },
            transactionId: "034df266-1921-4b55-8716-fdf87c487038",
            netRevenue: true,
            originalCurrency: "USD",
            currency: "USD",
            pbAg: "1.00",
            pbCg: "1.00",
            pbDg: "1.01",
            pbLg: "1.00",
            pbMg: "1.00",
            pbHg: "1.01",
          },
        ],
      },
    ],
  },
];
Collect Prebid Bid Auctions (pbjs_get_pbjs_auctions)

This module returns auction-specific data, and is often used in conjunction with the bid_requests and bid_responses module, which allows for joining these events via the transactionId field. This is a rich payload that is very useful in diagnosing gaps and finding opportunities for SSP Adapters in Prebid.

[
  {
    status: "success",
    ads_success: true,
    pbjs_auctions: [
      {
        pbjs: "pbjs",
        pbjs_auctions: [
          {
            adUnits: [
              {
                code: "br-ad-bnr_atf_05-home-sticky-ad",
                mediaTypes: {
                  banner: {
                    sizes: [
                      [1280, 100],
                      [728, 90],
                      [320, 50],
                    ],
                    sizeConfig: [
                      {
                        minViewPort: [970, 0],
                        type: "fluid",
                        sizes: [
                          [1280, 100],
                          [728, 90],
                        ],
                      },
                      {
                        minViewPort: [728, 0],
                        type: "fluid",
                        sizes: [
                          [728, 90],
                          [320, 50],
                        ],
                      },
                      {
                        minViewPort: [320, 0],
                        type: "fluid",
                        sizes: [[320, 50]],
                      },
                    ],
                  },
                },
                sizes: [
                  [1280, 100],
                  [728, 90],
                  [320, 50],
                ],
                transactionId: "750c72c9-88c2-4ac2-96b9-a4bf55313221",
                ortb2Imp: {
                  ext: { tid: "750c72c9-88c2-4ac2-96b9-a4bf55313221" },
                },
              },
            ],
            auctionId: "9c66fb32-1085-4e2c-b61a-f331b0171d1e",
            timeout: 2000,
            adUnitCodes: ["br-ad-bnr_atf_05-home-sticky-ad"],
          },
          {
            adUnits: [
              {
                code: "br-ad-bnr_atf_01-home-static-ad",
                mediaTypes: {
                  banner: {
                    sizes: [
                      [1280, 100],
                      [970, 250],
                      [970, 66],
                      [728, 90],
                      [300, 100],
                      [320, 50],
                      [1, 2],
                    ],
                    sizeConfig: [
                      {
                        minViewPort: [1280, 0],
                        type: "fluid",
                        sizes: [
                          [1280, 100],
                          [970, 250],
                          [970, 66],
                          [728, 90],
                          [1, 2],
                        ],
                      },
                      {
                        minViewPort: [970, 0],
                        type: "fluid",
                        sizes: [
                          [970, 250],
                          [970, 66],
                          [728, 90],
                          [1, 2],
                        ],
                      },
                      {
                        minViewPort: [728, 0],
                        type: "fluid",
                        sizes: [
                          [728, 90],
                          [300, 100],
                          [320, 50],
                          [1, 2],
                        ],
                      },
                      {
                        minViewPort: [320, 0],
                        type: "fluid",
                        sizes: [
                          [300, 100],
                          [320, 50],
                          [1, 2],
                        ],
                      },
                    ],
                  },
                },
                sizes: [
                  [1280, 100],
                  [970, 250],
                  [970, 66],
                  [728, 90],
                  [300, 100],
                  [320, 50],
                  [1, 2],
                ],
                transactionId: "c7069f16-64ae-4b2a-ad50-f769be789879",
                ortb2Imp: {
                  ext: { tid: "c7069f16-64ae-4b2a-ad50-f769be789879" },
                },
              },
            ],
            auctionId: "feb3d26d-6ad2-4ed8-8114-fa4b2f011dce",
            timeout: 2000,
            adUnitCodes: ["br-ad-bnr_atf_01-home-static-ad"],
          },
          (truncated...)
        ],
      },
    ],
  },
];
Collect Prebid Bid Responses (pbjs_get_pbjs_bid_responses)

Alongside Bid Adjustments, Bid Requests, and Auctions, Bid Responses rounds out the modules that are associated with core Prebid auction functionality. Bid Responses is highly dependent on both the user_id history (by default, the Sincera Synthetic User will have none) as well as the source IP used by the Synthetic User. To maximize results, consider using a a Residential IP when running this module.

[
  {
    status: "success",
    ads_success: true,
    pbjs_bid_responses: [
      {
        pbjs: "pbjs",
        pbjs_bid_responses: [
          {
            bidderCode: "appnexus",
            width: 970,
            height: 250,
            statusMessage: "Bid available",
            adId: "3080c9956ac0365",
            requestId: "2902b8ee74e895e",
            transactionId: "e2b9ae5a-b786-41a5-9e41-71700287e9fa",
            adUnitId: "a1278ed2-d694-4fa9-b299-1ef9d815a8a4",
            auctionId: "001a9423-c32e-44ca-8061-f5140f18f7f6",
            mediaType: "banner",
            source: "client",
            getStatusCode: "function(){return f}",
            getSize: 'function(){return this.width+"x"+this.height}',
            getIdentifiers:
              "function(){return{src:this.source,bidder:this.bidderCode,bidId:this.requestId,transactionId:this.transactionId,adUnitId:this.adUnitId,auctionId:this.auctionId}}",
            cpm: 0.010252,
            creativeId: 543837797,
            currency: "USD",
            netRevenue: true,
            ttl: 300,
            adUnitCode: "gpt_lb_3",
            appnexus: { buyerMemberId: 1212 },
            meta: {
              dchain: { ver: "1.0", complete: 0, nodes: [{ bsid: "1212" }] },
              brandId: 7648,
            },
            metrics: {
              "userId.init.consent": [0],
              "userId.mod.init": [
                0.39999999990686774, 4.2999999998137355, 5.3000000002794,
                0.299999999813735,
              ],
              "userId.mods.identityLink.init": [0.39999999990686774],
              "userId.mods.pairId.init": [4.2999999998137355],
              "userId.mods.sharedId.init": [5.3000000002794],
              "userId.mods.unifiedId.init": [0.299999999813735],
              "userId.init.modules": [11.799999999813735],
              "userId.callbacks.pending": [3606.2999999998137],
              "userId.mod.callback": [
                13.199999999720603, 22.899999999906868, 72.1000000000931,
              ],
              "userId.mods.sharedId.callback": [13.199999999720603],
              "userId.mods.unifiedId.callback": [22.899999999906868],
              "userId.mods.identityLink.callback": [72.1000000000931],
              "userId.callbacks.total": [72.2000000001863],
              "userId.total": [4190.5],
              "requestBids.gpp": 0,
              "requestBids.userId": 0.300000000279397,
              "requestBids.validate": 0.10000000009313226,
              "requestBids.makeRequests": 1.6000000000931323,
              "requestBids.total": 266.5,
              "requestBids.callBids": 262.5,
              "adapter.client.validate": 0,
              "adapters.client.appnexus.validate": 0,
              "adapter.client.buildRequests": 0.39999999990686774,
              "adapters.client.appnexus.buildRequests": 0.39999999990686774,
              "adapter.client.total": 252.79999999981374,
              "adapters.client.appnexus.total": 252.79999999981374,
              "adapter.client.net": 249.70000000018626,
              "adapters.client.appnexus.net": 249.70000000018626,
              "adapter.client.interpretResponse": 0.5,
              "adapters.client.appnexus.interpretResponse": 0.5,
              "addBidResponse.validate": 0.19999999972060323,
              "addBidResponse.total": 1.6999999997206032,
            },
            adapterCode: "appnexus",
            originalCpm: 0.010252,
            originalCurrency: "USD",
            responseTimestamp: 1723739249942,
            requestTimestamp: 1723739249691,
            bidder: "appnexus",
            timeToRespond: 251,
            pbLg: "0.00",
            pbMg: "0.00",
            pbHg: "0.01",
            pbAg: "0.00",
            pbDg: "0.01",
            pbCg: "0.00",
            size: "970x250",
            adserverTargeting: {
              hb_bidder: "appnexus",
              hb_adid: "3080c9956ac0365",
              hb_pb: "0.00",
              hb_size: "970x250",
              hb_source: "client",
              hb_format: "banner",
              hb_adomain: "",
              hb_crid: 543837797,
            },
            latestTargetedAuctionId: "001a9423-c32e-44ca-8061-f5140f18f7f6",
            auctionTimeout: 3000,
          },
          {
            bidderCode: "appnexus",
            width: 300,
            height: 600,
            statusMessage: "Bid available",
            adId: "44f5c24102a9f64",
            requestId: "37601e6e4fe93b",
            transactionId: "034df266-1921-4b55-8716-fdf87c487038",
            adUnitId: "f6899eb7-90b5-490d-8461-d3ff4d4f2bda",
            auctionId: "607f3b5a-a074-482b-9948-b1bb5991ba9e",
            mediaType: "banner",
            source: "client",
            getStatusCode: "function(){return f}",
            getSize: 'function(){return this.width+"x"+this.height}',
            getIdentifiers:
              "function(){return{src:this.source,bidder:this.bidderCode,bidId:this.requestId,transactionId:this.transactionId,adUnitId:this.adUnitId,auctionId:this.auctionId}}",
            cpm: 1.01775,
            creativeId: 509702191,
            currency: "USD",
            netRevenue: true,
            ttl: 300,
            adUnitCode: "gpt_gal_5",
            appnexus: { buyerMemberId: 668 },
            meta: {
              advertiserId: 5809777,
              dchain: { ver: "1.0", complete: 0, nodes: [{ bsid: "668" }] },
              brandId: 829794,
            },
            metrics: {
              "userId.init.consent": [0],
              "userId.mod.init": [
                0.39999999990686774, 4.2999999998137355, 5.3000000002794,
                0.299999999813735,
              ],
              "userId.mods.identityLink.init": [0.39999999990686774],
              "userId.mods.pairId.init": [4.2999999998137355],
              "userId.mods.sharedId.init": [5.3000000002794],
              "userId.mods.unifiedId.init": [0.299999999813735],
              "userId.init.modules": [11.799999999813735],
              "userId.callbacks.pending": [3606.2999999998137],
              "userId.mod.callback": [
                13.199999999720603, 22.899999999906868, 72.1000000000931,
              ],
              "userId.mods.sharedId.callback": [13.199999999720603],
              "userId.mods.unifiedId.callback": [22.899999999906868],
              "userId.mods.identityLink.callback": [72.1000000000931],
              "userId.callbacks.total": [72.2000000001863],
              "userId.total": [4190.5],
              "requestBids.gpp": 0,
              "requestBids.userId": 0.19999999972060323,
              "requestBids.validate": 0.10000000009313226,
              "requestBids.makeRequests": 1.3000000002793968,
              "requestBids.total": 257.79999999981374,
              "requestBids.callBids": 254.39999999990687,
              "adapter.client.validate": 0,
              "adapters.client.appnexus.validate": 0,
              "adapter.client.buildRequests": 0.300000000279397,
              "adapters.client.appnexus.buildRequests": 0.300000000279397,
              "adapter.client.total": 186.10000000009313,
              "adapters.client.appnexus.total": 186.10000000009313,
              "adapter.client.net": 184.800000000279,
              "adapters.client.appnexus.net": 184.800000000279,
              "adapter.client.interpretResponse": 0.19999999972060323,
              "adapters.client.appnexus.interpretResponse": 0.19999999972060323,
              "addBidResponse.validate": 0,
              "addBidResponse.total": 0.39999999990686774,
            },
            adapterCode: "appnexus",
            originalCpm: 1.01775,
            originalCurrency: "USD",
            responseTimestamp: 1723739250181,
            requestTimestamp: 1723739249995,
            bidder: "appnexus",
            timeToRespond: 186,
            pbLg: "1.00",
            pbMg: "1.00",
            pbHg: "1.01",
            pbAg: "1.00",
            pbDg: "1.01",
            pbCg: "1.00",
            size: "300x600",
            adserverTargeting: {
              hb_bidder: "appnexus",
              hb_adid: "44f5c24102a9f64",
              hb_pb: "1.00",
              hb_size: "300x600",
              hb_source: "client",
              hb_format: "banner",
              hb_adomain: "",
              hb_crid: 509702191,
            },
            latestTargetedAuctionId: "607f3b5a-a074-482b-9948-b1bb5991ba9e",
            auctionTimeout: 3000,
          },
        ],
      },
    ],
  },
];
Detailed GPID Data (pbjs_detailed_gpid)

This module is an extension of the “Detect GPID” module, but returns significantly more data. This is commonly used alongside the “Collect Ad Slot Coordinates” module to get a comprehensive understanding of the ad unit layout of a given Publisher’s environment.

[
  {
    status: "success",
    ads_success: true,
    detailed_gpids: [
      {
        gpid: "/1011785/Libertatea_v2/300x600_libertatea_sidebar_dreapta_p1_sectiune",
        gpid_type: 1,
        pbadslot:
          "/1011785/Libertatea_v2/300x600_libertatea_sidebar_dreapta_p1_sectiune",
        pbjs_ad_unit_code: "div-gpt-ad-1582897802913-0",
        aupname: null,
        adserver: {
          name: "gam",
          adslot:
            "/1011785/Libertatea_v2/300x600_libertatea_sidebar_dreapta_p1_sectiune",
        },
        tid: "340cddfa-a79c-4d87-9a3c-fcc358dbf929",
        wrapper: "pbjs",
        sizes: ["300x600"],
        media_types: ["banner"],
        viewport: "1280x1024",
      },
      {
        gpid: "/1011785/Libertatea_v2/300x600_libertatea_sidebar_dreapta_p2",
        gpid_type: 1,
        pbadslot:
          "/1011785/Libertatea_v2/300x600_libertatea_sidebar_dreapta_p2",
        pbjs_ad_unit_code: "div-gpt-ad-1582897842723-0",
        aupname: null,
        adserver: {
          name: "gam",
          adslot:
            "/1011785/Libertatea_v2/300x600_libertatea_sidebar_dreapta_p2",
        },
        tid: "29b9972c-015c-4f9b-b016-abab3bcea03d",
        wrapper: "pbjs",
        sizes: ["300x600"],
        media_types: ["banner"],
        viewport: "1280x1024",
      },
    ],
  },
];
URL Agreement (pbjs_url_agreement)

Checks to see if the outbound bid requests are all stipulating the same URL that is present on the browser address bar, or if any SSPs are broadcasting alternative URLs (often just the parent domain).

[
  {
    status: "success",
    ads_success: true,
    unique_bidders: 16,
    matching_bidders_to_address_bar: 13,
    unmatched_bidders_to_address_bar: 8,
    urls_present_tld_only_bidders: 8,
    volatile_wrappers: null,
    persistent_wrappers: ["pbjsYLHH", "pbjsnp", "dmpbjs", "tbpbjs", "qpb"],
    unique_urls: 2,
    urls: [
      {
        ssp_url:
          "https://die-sport-seite.de/die-unbemerkten-details-in-den-logos-der-fussballvereine/",
        wrapper: "pbjsYLHH",
        bidder: ["stroeerCore", "appnexus", "openx", "adform", "orbidder"],
      },
      {
        ssp_url:
          "https://die-sport-seite.de/die-unbemerkten-details-in-den-logos-der-fussballvereine/",
        wrapper: "pbjsnp",
        bidder: ["yieldlab"],
      },
      {
        ssp_url:
          "https://die-sport-seite.de/die-unbemerkten-details-in-den-logos-der-fussballvereine/",
        wrapper: "dmpbjs",
        bidder: [
          "defineTwiago",
          "improvedigital",
          "defineAdup",
          "adyoulike",
          "criteo",
          "yieldlab",
        ],
      },
      {
        ssp_url:
          "https://die-sport-seite.de/die-unbemerkten-details-in-den-logos-der-fussballvereine/",
        wrapper: "tbpbjs",
        bidder: ["amx"],
      },
      {
        ssp_url: "die-sport-seite.de",
        wrapper: "qpb",
        bidder: [
          "stv",
          "improvedigital",
          "rubicon",
          "stroeerCore",
          "appnexus",
          "criteo",
          "visx",
          "smartadserver",
        ],
      },
    ],
  },
];
Get PreBid Winning Bids (pbjs_get_bid_won)

This module is associated with the overall Prebid Auction flow, and is a subset of data returned by the Prebid bidWon object. Useful when combined with bid_request and bid_response objects.

[
  {
    status: "success",
    ads_success: true,
    pbjs_bid_won: [
      {
        wrapper_name: "pbjs",
        pbjs_event: "bidWon",
        gpid: "/4011/chicagotribune.com/home/cube1_rrail_atf#1",
        ad_unit_code: "htlad-4-gpt",
        auction_id: "88a194ac-1be4-4890-a9e8-693128b54c2d",
        ad_unit_id: "464e6df5-3a1e-4f9e-ae02-48a3f89bc5e0",
        bidder_code: "vidazoo",
        cpm: 0.400889664,
        currency: "USD",
        advertiser_domain: ["nytimes.com"],
        collected_at: "2024-10-16T20:21:48.891Z",
      },
      {
        wrapper_name: "pbjs",
        pbjs_event: "bidWon",
        gpid: "/4011/chicagotribune.com/home/sponsorship_1#1",
        ad_unit_code: "htlad-1-gpt",
        auction_id: "88a194ac-1be4-4890-a9e8-693128b54c2d",
        ad_unit_id: "1c76250a-4db8-4577-a9fe-b17fe9daf970",
        bidder_code: "ix",
        cpm: 0.42,
        currency: "USD",
        advertiser_domain: ["nytimes.com"],
        collected_at: "2024-10-16T20:21:48.891Z",
      },
      {
        wrapper_name: "pbjs",
        pbjs_event: "bidWon",
        gpid: "/4011/chicagotribune.com/home/sponsorship_2#1",
        ad_unit_code: "htlad-5-gpt",
        auction_id: "3537d3b7-2c26-4947-ae64-0e75bb3c46e6",
        ad_unit_id: "eb6e132c-214b-4b55-8e32-563b30a0a732",
        bidder_code: "ix",
        cpm: 0.43,
        currency: "USD",
        advertiser_domain: ["nytimes.com"],
        collected_at: "2024-10-16T20:21:48.892Z",
      },
      {
        wrapper_name: "pbjs",
        pbjs_event: "bidWon",
        gpid: "/4011/chicagotribune.com/home/cube2_rrail_mid#1",
        ad_unit_code: "htlad-6-gpt",
        auction_id: "61a4f1e0-3bb9-4325-bfb0-e6a6c9f839c6",
        ad_unit_id: "ff1e843c-98fd-45a3-a881-d813788e9d86",
        bidder_code: "ix",
        cpm: 0.47,
        currency: "USD",
        advertiser_domain: ["nytimes.com"],
        collected_at: "2024-10-16T20:21:48.892Z",
      },
      {
        wrapper_name: "pbjs",
        pbjs_event: "bidWon",
        gpid: "/4011/chicagotribune.com/home/sponsorship_4#1",
        ad_unit_code: "htlad-8-gpt",
        auction_id: "f3f8b38b-792c-46dd-82fd-b3b3e5d65c38",
        ad_unit_id: "6d3b9077-c3cc-4a75-ac1a-962c09c97e81",
        bidder_code: "appnexus",
        cpm: 0.343782,
        currency: "USD",
        advertiser_domain: [],
        collected_at: "2024-10-16T20:21:48.892Z",
      },
      truncated...
    ],
  },
];
Get BounceX Absorbed IDs (altwrapper_get_bouncex_absorbed_ids)
[
  {
    status: "success",
    ads_success: true,
    frame_id: "EED168D0CA58C8AF00E1BB17049A3512",
  },
];
Get Prebid Wrapper Summary (pbjs_get_pbjs_wrappers)

A simple, summary view of all Prebid wrappers found on a given publisher. Note that this includes a content fingerprint to delineate wrappers who have the same name and version values.

[
  {
    status: "success",
    ads_success: true,
    name: "pbjs",
    provider: "Prebid.org",
    version: "v8.51.0",
    iframe: null,
    volatile: false,
    bid_adapters: 9,
    id_adapters: 9,
    fingerprint: "aaddac7eeb707538d147e1b66e9faa4da3946e39",
  },
  {
    status: "success",
    ads_success: true,
    name: "pbjs",
    provider: "Prebid.org",
    version: "v9.4.1",
    iframe: "",
    volatile: true,
    bid_adapters: 45,
    id_adapters: 5,
    fingerprint: "6eac06ffd760a571c49222d726197d31ed9aa789",
  },
  {
    status: "success",
    ads_success: true,
    name: "ihowpbjs",
    provider: "PubMatic",
    version: "v8.30.0",
    iframe: "bcx_identityhub_frame",
    volatile: false,
    bid_adapters: 0,
    id_adapters: 9,
    fingerprint: "fcbaad6e94f3d9711fc5f7a0c1ab440df2def71d",
  },
];
Privacy Sandbox

Data extracted from Google’s Privacy Sandbox.

Check Interest Groups (privacysandbox_check_interest_groups)

Detects presence of the Protected Audiences API which allows for programmatic bidding access on user interest groups.

[
  {
    status: "Joined",
    ads_success: true,
    interest_group: [
      {
        interestGroup: {
          lifetimeMs: 86400000,
          name: "IGB0004A",
          owner: "https://proton.ad.gt",
        },
        duration: null,
      },
      {
        interestGroup: {
          lifetimeMs: 86400000,
          name: "IGB00173",
          owner: "https://proton.ad.gt",
        },
        duration: null,
      },
      {
        interestGroup: {
          lifetimeMs: 86400000,
          name: "IGB000F8",
          owner: "https://proton.ad.gt",
        },
        duration: null,
      },
      {
        interestGroup: {
          lifetimeMs: 86400000,
          name: "IGB0011E",
          owner: "https://proton.ad.gt",
        },
        duration: null,
      },
      {
        interestGroup: {
          lifetimeMs: 86400000,
          name: "IGB000CA",
          owner: "https://proton.ad.gt",
        },
        duration: null,
      },
      {
        interestGroup: {
          lifetimeMs: 86400000,
          name: "IGB0024C",
          owner: "https://proton.ad.gt",
        },
        duration: null,
      },
      {
        interestGroup: {
          lifetimeMs: 86400000,
          name: "IGB000DF",
          owner: "https://proton.ad.gt",
        },
        duration: null,
      },
      {
        interestGroup: {
          lifetimeMs: 86400000,
          name: "IGB001B3",
          owner: "https://proton.ad.gt",
        },
        duration: null,
      },
      (truncated...)
    ],
  },
];

Collect metadata related to privacy features, settings, and technology.

Collect Privacy Policy (policy_find_privacy)
[
  {
    status: "success",
    ads_success: true,
    "Privacy Policy": ["https://www.snopes.com/privacy-policy/"],
    "Do Not Sell": [],
  },
];
[
  {
    status: "success",
    ads_success: true,
    "Consent Provider": "Sourcepoint",
  },
];
[
  {
    status: "success",
    ads_success: true,
    USP: {
      usp_version: 1,
      uspString: "1YNN",
      DNS_link: null,
      DNS_label: "Do Not Sell or Share My Personal Information",
    },
    TCFv2: {
      user_agreement: null,
      addtlConsent: null,
      cmpId: null,
      cmpStatus: null,
      cmpVersion: null,
      eventStatus: null,
      gdprApplies: null,
      isServiceSpecific: null,
      outOfBand: null,
      publisher_custom: null,
      publisherCC: null,
      purpose: null,
      purposeOneTreatment: null,
      specialFeatureOptins: null,
      tcString: null,
      tcfPolicyVersion: null,
      useNonStandardStacks: null,
      vendor: null,
    },
    GPP: {
      ping_data: {
        gppVersion: "1.1",
        cmpStatus: "loaded",
        cmpDisplayStatus: "disabled",
        signalStatus: "ready",
        supportedAPIs: [
          "8:uscav1",
          "9:usvav1",
          "7:usnatv1",
          "10:uscov1",
          "12:usctv1",
          "11:usutv1",
          "2:tcfeuv2",
        ],
        cmpId: 28,
        sectionList: [7],
        applicableSections: [7],
        gppString: "DBABLA~BVQqAAAAAWA.QA",
        parsedSections: {
          usnatv1: {
            Version: 1,
            SharingNotice: 1,
            SaleOptOutNotice: 1,
            SharingOptOutNotice: 1,
            TargetedAdvertisingOptOutNotice: 1,
            SensitiveDataProcessingOptOutNotice: 0,
            SensitiveDataLimitUseNotice: 0,
            SaleOptOut: 2,
            SharingOptOut: 2,
            TargetedAdvertisingOptOut: 2,
            SensitiveDataProcessing: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            KnownChildSensitiveDataConsents: [0, 0],
            PersonalDataConsents: 0,
            MspaCoveredTransaction: 1,
            MspaOptOutOptionMode: 1,
            MspaServiceProviderMode: 2,
            GpcSegmentType: 1,
            Gpc: false,
          },
        },
      },
      section_data: [],
    },
  },
];
Debug

Useful tools for investigating issues on page.

Take Screenshot (screenshot_take_screenshot)

Provides a Sincera-hosted screenshot of given page scan. This will only be a single screenshot of viewport 0 (Ie. just landed on the page after full load)

[
  {
    status: "success",
    ads_success: true,
    screenshot:
      "https://sincera-pj-screenshots.s3.amazonaws.com/screenshot/image_url_here.png",
    image_hash: "ffff7fe3e3e3c36f",
  },
];
Take Multi-Viewport Screenshot (screenshot_take_multiviewport_screenshot)

Provides Sincera-hosted screenshot(s) of given page scan up until the scroll depth defined on the job. Please note, some content is only loaded when its in view so you may notice some blank sections which may be populated with ad units or are lazy loaded elements.

[
  {
    status: "success",
    ads_success: true,
    "Tab 0": [
      {
        viewport_1: {
          screenshot:
            "https://sincera-pj-screenshots.s3.amazonaws.com/screenshot/72520ab0-0cf3-4ca4-9894-a530d6024441-20241122225447.png",
          image_hash: "e400ffff812131c0",
        },
      },
      {
        viewport_2: {
          screenshot:
            "https://sincera-pj-screenshots.s3.amazonaws.com/screenshot/d8b2ed87-a3c7-4464-9727-c27e3ab7729c-20241122225452.png",
          image_hash: "00f6ff8fffffbf00",
        },
      },
      {
        viewport_3: {
          screenshot:
            "https://sincera-pj-screenshots.s3.amazonaws.com/screenshot/a0551630-7f66-4098-9514-d2770b850b43-20241122225456.png",
          image_hash: "bc0081ffffffff40",
        },
      },
      {
        viewport_4: {
          screenshot:
            "https://sincera-pj-screenshots.s3.amazonaws.com/screenshot/9954ac63-c6e8-49c8-9f1e-65a1355b6730-20241122225500.png",
          image_hash: "fc81818183ffff40",
        },
      },
      {
        viewport_5: {
          screenshot:
            "https://sincera-pj-screenshots.s3.amazonaws.com/screenshot/d918efbc-cac6-461b-991c-8e2647a56148-20241122225503.png",
          image_hash: "0000ffffffbfff00",
        },
      },
    ],
  },
];
Ad Tech Vendors

Discover the vendors present on a given URL.

Detects whether there is affiliate marketing vendors present on page, with associated metadata.

[
  {
    status: "success",
    ads_success: true,
    last_detected: "2024-08-15",
    affiliate_link_text: "",
    affiliate_link_url:
      "https://go.skimresources.com/?id=87443X1593552&xs=1&xcust=SC--|xid:fr1723740760566bji&url=https%3A%2F%2Fwww.krewe.com%2Fproducts%2Fst-louis-classics-caffe-dolce-24k-sunglasses",
    affiliate_provider_id: 7,
  },
  {
    status: "success",
    ads_success: true,
    last_detected: "2024-08-15",
    affiliate_link_text: "Krewe",
    affiliate_link_url:
      "https://go.skimresources.com/?id=87443X1593552&xs=1&xcust=SC--|xid:fr1723740760566cgi&url=https%3A%2F%2Fwww.krewe.com%2Fproducts%2Fst-louis-classics-caffe-dolce-24k-sunglasses",
    affiliate_provider_id: 7,
  },
  {
    status: "success",
    ads_success: true,
    last_detected: "2024-08-15",
    affiliate_link_text: "Buy Now",
    affiliate_link_url:
      "https://go.skimresources.com/?id=87443X1593552&xs=1&xcust=SC--|xid:fr1723740760566jga&url=https%3A%2F%2Fwww.krewe.com%2Fproducts%2Fst-louis-classics-caffe-dolce-24k-sunglasses",
    affiliate_provider_id: 7,
  },
  {
    status: "success",
    ads_success: true,
    last_detected: "2024-08-15",
    affiliate_link_text: "",
    affiliate_link_url:
      "https://www.amazon.com/Wellike-Colorful-Necklace-Freshwater-Stainless/dp/B094VCWT31?tag=stylecaster0d-20",
    affiliate_provider_id: 1,
    affiliate_link_owner: "stylecaster0d-20",
  },
  (truncated...)
];
MFA

Detection related to made-for-advertising websites.

Variable Ad Load (beta) (mfa_get_variable_ad_load)

Detects whether or not a publisher is varying the ad load (as measured by the A2CR and ad count metrics) based on the source of the traffic. When a publisher engages in Variable Ad Load (VAL), the URL loads different ad experiences based on the submitted URL versus the base URL. Best practice for using this module is to ensure your URLs are decorated.

[
  {
    status: "success",
    ads_success: true,
    is_val: true,
    val_details: {
      a2cr: { fanged: 0.2441, clean: 0.1855 },
      ad_count: { fanged: 5, clean: 6 },
    },
  },
];