Amazon — Historical Snapshot
NewSnapshot Content
//This is your domain, as in, how you who are calling the API wish to be identified.
var MY_DOMAIN = document.domain;
var REQUIRE_USER_EXPRESSED_PERMISSION = true;
var _STATE = {};
/**
* Different pages add the Consent Manager in different locations, so all callers of the API must wait till
* the API is loaded. The API is loaded in two stages:
* 1) The first stage is where the "PrivacyManagerAPI" object exists on the page and where default and
* page/domain specific settings can be obtained. If your requirements demand user consent, you must wait
* for the second stage load, but it is always recommended to wait for the second stage no matter what.
* The "loading" parameter will be added to all API responses when the API is in this state.
* 2) The second stage loads the user preferences and the domain specific information. If you made a
* postMessage API call during the first stage, then the API will automatically send you another, updated,
* response if the result has changed.
*/
function runOnce(){
//CHECK: for API exists on the page
if(!_STATE.hasRunOnce && window.PrivacyManagerAPI){
console.log("doing run once");
//Register with the API for automatic updates of user preferences (for the settings you care about)
//--OR-- if the API is loading, then this will send an update when the API is done and has loaded the user preferences.
window.addEventListener("message", function(e){
try{
var json = JSON.parse(e.data);
json.PrivacyManagerAPI && handleAPIResponse(json.PrivacyManagerAPI);
}catch(e){
e.name != 'SyntaxError' && console.log(e);
}
}, false);
var apiObject = {PrivacyManagerAPI: { self: MY_DOMAIN, action: "getConsent" , timestamp: new Date().getTime(), type: "functional" }};
window.top.postMessage(JSON.stringify(apiObject),"*");
apiObject = {PrivacyManagerAPI: { self: MY_DOMAIN, action: "getConsent" , timestamp: new Date().getTime(), type: "advertising" }};
window.top.postMessage(JSON.stringify(apiObject),"*");
_STATE.hasRunOnce = true;
_STATE.i && clearInterval(_STATE.i);
}
}
/**
* This function returns value of notice_behavior cookie to determine location and behavior manager based on domain.
* When no notice_behavior cookie exists, this returns a blank string.
*/
function getBehavior() {
var result = "";
var rx = new RegExp("\\s*notice_behavior\\s*=\\s*([^;]*)").exec(document.cookie);
if(rx&&rx.length>1){
result = rx[1];
}
return result;
}
/**
* This function is called whenever a user preference is initially set, is retrieved for the first time on this page, or is updated.
* This is the gateway function which should be customized by each client (you) to determine when and how to handle the API response.
*
* The second half of the function determines settings from the CM API, and decides which elements on the page should be "activated" based upon those settings.
* Elements can only be activated once. Elements can not be deactivated, once activated.
*/
function handleAPIResponse(response){
//CHECK: make sure this response is to YOU. You will actually get the messages to all API callers on this page, not just to you.
if(!response.source || response.self != MY_DOMAIN ) return;
console.log("user decision",response);
//Required trackers/cookies are always allowed, no need to ask permission.
if( !_STATE.hasLoadedRequired ){
activateElement(document.querySelectorAll(".trustecm[trackertype=required]"));
_STATE.hasLoadedRequired = true;
}
// Check if behavior manager is EU
var isEU = /.*(,|)eu/i.test(getBehavior());
//Case where we don't want to do anything till the user has made a preference.
if(isEU && REQUIRE_USER_EXPRESSED_PERMISSION && response.source != "asserted" ) return;
//Step 1) Get Consent Manager settings (user prefs)
// These API calls are DIFFERENT than the original API call ("response" parameter) so they must be called separately.
//Step 2) Apply the settings after checking if approved
var setting = null;
if( !_STATE.hasLoadedAdvertising ){
setting = PrivacyManagerAPI.callApi("getConsent", MY_DOMAIN , null ,null, "advertising");
if( setting.consent=="approved" ){
activateElement(document.querySelectorAll(".trustecm[trackertype=advertising]"));
_STATE.hasLoadedAdvertising = true;
}console.log(setting);
}
if( !_STATE.hasLoadedFunctional ){
setting = PrivacyManagerAPI.callApi("getConsent", MY_DOMAIN , null ,null, "functional");
if( setting.consent=="approved" ){
activateElement(document.querySelectorAll(".trustecm[trackertype=functional]"));
_STATE.hasLoadedFunctional = true;
}console.log(setting);
}
// No additional checking, this always fires, but only after a user has consented
if( !_STATE.hasLoadedAnyConsent ){
activateElement(document.querySelectorAll(".trustecm[trackertype=any]"));
_STATE.hasLoadedAnyConsent = true;
}
//check of vendor domain and fires if that domain is approved, which is based on how that domain was categorized on the backend
var vendors = document.querySelectorAll(".trustecm[trackertype=vendor]");
for (var i=0; i < vendors.length; i++) {
var currentVendor = vendors[i];
var vDomain = currentVendor.getAttribute("vsrc");
if (vDomain && !_STATE['hasLoaded'+vDomain]) {
setting = PrivacyManagerAPI.callApi("getConsent", MY_DOMAIN, vDomain);
if( setting.consent=="approved" ){
activateElement(document.querySelectorAll(".trustecm[trackertype=vendor][vsrc='"+ vDomain +"']"));
_STATE['hasLoaded'+vDomain] = true;
}console.log(setting);
}
}
}
/**
* Activates (runs, loads, or displays) an element based upon element node name.
* @param {Array.<HTMLElement>} list
*/
function activateElement(list){
if(!(list instanceof Array || list instanceof NodeList)) throw "Illegal argument - must be an array";
console.log("activating", list);
for(var item,i=list.length;i-- >0;){
item = list[i];
item.class = "trustecm_done";
switch(item.nodeName.toLowerCase()){
case "script":
var z = item.getAttribute("thesrc");
if(z){
var y = document.createElement("script");
y.src = z;
y.async = item.async;
item.parentNode.insertBefore(y,item);
}else eval(item.text || item.textContent || item.innerText);
}
}
}
_STATE.i = setInterval(runOnce,10);
:root {
}
:root {
--button-border-radius:40px;
}
:root {
--font-1: "Amazon Ember", "Arial";
--font-2: "Ember Modern Display";
}
body {
--font-1: "Amazon Ember";
--font-2: "Ember Modern Display";
--font-page-titles: var(--font-2);
--font-list-titles: var(--font-2);
--font-promo-titles: var(--font-2);
--font-description: var(--font-2);
--font-quote: var(--font-1);
}Digital Services Act (DSA): Amazon EU Store Data Access for Vetted Researchers - Trustworthy Shopping at Amazon{"@context":"http://schema.org","@type":"WebPage","url":"https://trustworthyshopping.aboutamazon.com/digital-services-act-dsa-amazon-eu-store-data-access-for-vetted-researchers","publisher":{"@type":"Organization","name":"Trustworthy Shopping at Amazon","logo":{"@type":"ImageObject","url":"https://cdn-trustworthyshopping.aboutamazon.com/4f/7c/f30570434070aab77383519e9ee1/style-2-color-squid-smile.svg"}},"name":"Digital Services Act (DSA): Amazon EU Store Data Access for Vetted Researchers - Trustworthy Shopping at Amazon"}
/*
This allows us to load the IE polyfills via feature detection so that they do not load
needlessly in the browsers that do not need them. It also ensures they are loaded
non async so that they load before the rest of our JS.
/
var head = document.getElementsByTagName('head')[0];
if (!window.CSS || !window.CSS.supports || !window.CSS.supports('--fake-var', 0)) {
var script = document.createElement('script');
script.setAttribute('src', "https://cdn-trustworthyshopping.aboutamazon.com/resource/0000018b-f767-d248-a38b-f77779e70000/util/IEPolyfills.min.534a3056aa155ab6473f17072ece1d5d.gz.js");
script.setAttribute('type', 'text/javascript');
script.async = false;
head.appendChild(script);
}
var link = document.createElement('link');
link.setAttribute('href', '//fonts.googleapis.com/css?family=Roboto:300,400,700|Merriweather:300,400,700&display=swap');
var relList = link.relList;
if (relList && relList.supports('preload')) {
link.setAttribute('as', 'style');
link.setAttribute('rel', 'preload');
link.setAttribute('onload', 'this.rel="stylesheet"');
link.setAttribute('crossorigin', 'anonymous');
} else {
link.setAttribute('rel', 'stylesheet');
}
head.appendChild(link);
Approach
Robust Proactive Controls
Innovative Tools and Technology
Holding Bad Actors Accountable
Protecting and Educating Customers
Collaborating Across Partners and Industry
Focus Areas
Product Safety
Anti-Counterfeiting
Trustworthy Reviews
Protecting Intellectual Property
Scam Prevention
Combating Organized Retail Crime
Impact
Latest Updates
Resources
Search Query
Submit Search
Show Search
Menu
Approach
Robust Proactive Controls
Innovative Tools and Technology
Holding Bad Actors Accountable
Protecting and Educating Customers
Collaborating Across Partners and Industry
Focus Areas
Product Safety
Anti-Counterfeiting
Trustworthy Reviews
Protecting Intellectual Property
Scam Prevention
Combating Organized Retail Crime
Impact
Latest Updates
Resources
Digital Services Act (DSA):Amazon EU Store Data Access for Vetted Researchers
Updated: 29 October 2025
Overview and research purposeArticle 40 of the DSA establishes that very large online platforms must provide data access to vetted researchers. This access supports research that contributes exclusively to the detection, identification and understanding of systemic risks in the European Union, as outlined in Article 34 of the DSA, and assessment of the adequacy, efficiency and impacts of risk mitigation measures pursuant to Article 35 of the DSA.Request processVetted researchers must submit a detailed request through the Digital Services Coordinator of establishment.Access requirements Data access will be granted to vetted researchers that meet requirements of Article 40(8) of the DSA, upon receipt of a reasoned request from the Digital Services Coordinator.Data access contact informationAmazon has established a dedicated point of contact for the data access process:
dsa-data-access@amazon.com
. While we accept communications in English, German, and French, English is preferred.European Commission’s Data Access PortalThe European Commission has created a DSA Data Access Portal to support and streamline the management of the data access process. The portal serves as the central digital point for information exchanges between applicant researchers, vetted researchers, data providers and Digital Services Coordinators. Researchers wishing to submit data access applications must first
register
a user profile in the
European Commission DSA Data Access Portal
.DSA data catalogueAmazon available data are:Regulatory contacts
Metric split
Metric definition
Data and metadata structure
Total regulatory contacts
Total regulatory contacts from authorities received by Amazon
Interger
Date
Date of reception of regulatory contacts from authorities
Datetime
Product type
Types of products reported by member state authority orders
Text
Takedown request vs. information request
Total numbers of takedown requests compared to total number of information requests with no need for takedown
Interger
EU member state of regulatory contact
EU member state issuing the order
Text
Type of regulatory contact
Type of illegal content of member state authority orders
Text
Time to acknowledge regulatory contact and resolve a regulatory contact.
Median time in days to (a) inform authority of receipt; and (b) to give effect to the order
Float
Notices about illegal content
Metric split
Metric definition
Data and metadata structure
Total number
Number of notices submitted via our notice & action mechanisms
Integer
Country
The Amazon EU Store receiving the notice
Text
Date
Date of reception of notice
Datetime
Product type
Product type reported in the notice received
Text
Accepted / rejected
Validity rate (%) (of incoming volume)
Float
Notices by type of illegal content
Type of illegal content of notices received via notice & action mechanism
Text
Notices that were auto-resolved
Number of notices of illegal content processed via automated means
Integer
Median time to resolve total DSA notices
It refers to median time (in days) to take action/s in response to notice
Float
Total number of actions taken on total number of DSA notices
Actions taken pursuant notices received or based on T&Cs or law
Integer
Notices from trust flaggers
Notices of illegal content submitted by trusted flaggers
Integer
Counterfeit risk, brand protection & intellectual property protections (IPP)Counterfeit items identified, seized and disposed
Metric split
Metric definition
Data and metadata structure
Total number
Number of counterfeit items identified, seized and disposed
Integer
Country
The Amazon EU Store where counterfeit items were identified
Text
Date
Date of identification of counterfeit
Datetime
Product type
Product type reported as counterfeit
Text
Brands using Project Zero
Metric split
Metric definition
Data and metadata structure
Total number
Total number of brands using Project Zero
Integer
Country
Country of brands using Project Zero
Text
Date
Date of brand report
Datetime
Brands using Transparency
Metric split
Metric definition
Data and metadata structure
Total number
Total number of brands using Transparency
Integer
Country
Country of brands using Transparency
Text
Date
Date of brand report
Datetime
Product safety riskUnsafe products removed due to public recalls and authorities’ requests
Metric split
Metric definition
Data and metadata structure
Total number
Total number of unsafe products removed due to public recalls and authorities’ requests
Integer
Country
The Amazon EU Store where products were sold
Text
Date
Date of product removal
Datetime
Product type
Type of products recalled
Text
Products removed that Amazon safety investigations confirmed unsafe or for which we were missing information
Metric split
Metric definition
Data and metadata structure
Total number
Total number of products removed that Amazon safety investigations confirmed unsafe or for which we were missing information
Integer
Country
The Amazon EU Store where products were sold
Text
Date
Date of product removal
Datetime
Product type
Type of products removed
Text
Products removed for violating controversial products guidelines
Metric split
Metric definition
Data and metadata structure
Total number
Number of products removed for violating controversial products guidelines
Integer
Country
The Amazon EU Store where products were sold
Text
Date
Date of product removal
Datetime
Product type
Type of products removed
Text
Complaints
Metric split
Metric definition
Data and metadata structure
Total complaints received
Total number of complaints related to content or notices
Integer
Country
The Amazon EU Store where complaints were referring to
Text
Date
Date of complaint reception
Datetime
Basis for total complaints received
Basis of, and the decisions taken, regarding complaints received via our internal complaints handling system
Text
Total complaints where decision was reversed
Number of instances where we reversed our decisions regarding a complaint
Integer
Median time to resolve total complaints received
Median time for taking decisions regarding complaints
Float
Out-of-court settlement disputes
Metric split
Metric definition
Data and metadata structure
Total mediation cases sent for out-of-court dispute
Number of disputes submitted to out-of-court dispute settlement bodies
Integer
Country
The Amazon EU Store which the dispute relates to
Text
Date
Date when Amazon is notified of the dispute
Datetime
Type of illegality
Type of illegal content of notices received via out-of-court dispute settlement mechanism
Text
Out-of-court dispute settlement body
Out-of-court-dispute-settlement body selected by requesters
Text
Outcome of mediation cases
The outcomes of the dispute settlement
Integer
Share of out-of-court disputes with decision implemented
Share of disputes where we implemented the decision of out-of-court dispute settlement bodies
Integer
Time to resolve out-of-court dispute settlement
Time for out-of-court dispute settlement bodies to complete the out-of-court dispute settlement procedures, from when an out-of-court dispute settlement body notifies Amazon of the dispute to when the body shares their settlement recommendation with Amazon
Float
Data access modalitiesUpon approval from the Digital Services Coordinator, researchers will receive an email with login credentials and a link to Amazon’s DSA Article 40 Data Access System. Once signed in, please follow the instructions provided.
Approach
Focus Areas
Impact
Latest Updates
Resources
Amazon News
Our Positions
Public Policy
Press Center
Investor Resources
Facts about Amazon
Conditions of Use
|
Privacy Policy
| Cookie Preferences | © 2026, Amazon Services LLC
document.addEventListener('DOMContentLoaded', () => {
try {
let html5Videos = document.querySelectorAll(`.HTML5VideoPlayer video`)
html5Videos.forEach(video => {
video.addEventListener('play', (event) => {
if (PARSELY.video) {
let videoData = video.closest('.HTML5VideoPlayer').dataset
let metadata = {
"title": videoData.videoTitle,
"image_url": video.poster || video.closest('.HTML5VideoPlayer').parentNode.querySelector('[data-poster]').style.backgroundImage.split('"')[1],
"duration": parseInt(video.duration * 1000),
"pub_date_tmsp": videoData.pubDate || '',
"video_platform": "html5"
}
let url = window.location.href
PARSELY.video.trackPlay(videoData.videoId, metadata, url)
}
})
video.addEventListener('pause', (event) => {
if (PARSELY.video) {
let videoData = video.closest('.HTML5VideoPlayer').dataset
let metadata = {
"title": videoData.videoTitle,
"image_url": video.poster || video.closest('.HTML5VideoPlayer').parentNode.querySelector('[data-poster]').style.backgroundImage.split('"')[1],
"duration": parseInt(video.duration * 1000),
"pub_date_tmsp": videoData.pubDate || '',
"video_platform": "html5"
}
let url = window.location.href
PARSELY.video.trackPause(videoData.videoId, metadata, url)
}
})
})
} catch (e) {
// Ignore
}
})