Skip to main content
Scientists in laboratory working with computer and microscope

Product Design, Compliance and Regulatory Insights

Research and secure technical, regulatory and certification information for hundreds of thousands of products and navigate compliance requirements for everything from materials to connected devices.

Contact us

Global businesses of all sizes, spanning a host of industries, rely on UL Solutions' trusted software to help protect their brand and eliminate non-compliance risks associated with connected devices and chemical regulations.

Effective product design and compliance create trust

From the early stages of product development through the end of life, product manufacturers must consider and plan for the intended use of a product to make certain it will meet all of the necessary regulatory requirements to support market plans. With the world of connected devices that we live in today, an extra layer of security requirements must be addressed. Brands have a lot at stake in today’s fast-paced product development cycles. Moving too fast without the proper systems in place to manage complex, global regulatory compliance requirements or device security protocols can mean that you are not compliant, and you are taking on more risk than is acceptable for your organization. However, moving too slowly can cause an organization to miss out on revenue and market share.

Single, structured source for regulatory intelligence

Today’s global regulatory environment is more complex than ever, making it challenging for organizations to keep up with the volume of changes and fully understand them on their own. This is one reason why UL Solutions utilizes over 70 regulatory experts around the globe to collect and analyze requirements for our ChemADVISOR® database. This regulatory database helps you understand the regulatory compliance challenges for over half a million products. Our regulatory experts use this same powerful regulatory database to assist clients with their compliance challenges. ChemADVISOR®'s regulatory data is flexible in accessing and using information. You can secure individual or corporate licenses or integrate the content into your own solutions with APIs and other flexible options. 

Learn more

Connecting material suppliers and buyers

UL Prospector® has been serving formulators, engineers, R&D and other industry professionals to help identify and analyze the technical information they need for many years. When you need to identify new materials, or you’re trying to secure replacement options when supply chain challenges arise, Prospector’s global database of materials puts technical information right at your fingertips. For many products, it gives you quick access to regulatory highlights for timely and powerful decision-making.

Learn more

Locate UL Certified products, components and materials in a single location

UL Product iQ® is a comprehensive source for finding UL certification information. It also offers access to resources like confirmation letters, providing you with a central data repository to help make quick and informed decisions. With your own individual Product iQ account, you can receive personalized alerts and save information to reference later. With a simple search in this robust database, you can verify the UL certification information of a product or component, locate our guide information or search for an alternate certified product. 

Learn more

Digital regulatory monitoring for medical device compliance

Emergo by UL’s Regulatory Affairs Management Suite (RAMS) provides automated regulatory compliance management capabilities for medical device manufacturers across markets worldwide. More than 1,700 companies rely on RAMS to make sure their device registrations and certifications remain valid. They can also access digital tools for device classification, prepare submissions to the U.S. Food and Drug Administration and other regulators, and find actionable medical device regulatory and market intelligence. Affiliate software services for quality and learning management are also available via RAMS.

Visit RAMS

Global regulatory compliance software

The ever-changing and complex chemical regulations in today’s global market put significant strain on resources and systems within organizations of all types. Many organizations find that they have critical data needed for regulatory documentation stored across different internal systems that don’t communicate with each other.

Our chemical data management software, WERCS Studio, is a powerful, configurable platform that can help you meet your global regulatory compliance needs. Whether authoring Safety Data Sheets (SDS), completing critical compliance documents or pulling together disjointed chemical data, WERCS Studio provides a comprehensive and flexible automated solution available to help mitigate risks.

Learn more

Cybersecurity for connected products

The first step to safeguarding a secure information framework is to understand possible threats, as well as what constitutes best practice and preventative measures. Managing cybersecurity vulnerabilities becomes crucial especially as products and devices become more connected to various networks and data transfer ports. Our software and digital tools empower manufacturers and financial services companies to proactively assess baseline and iterative vulnerabilities, and to identify appropriate corrective or strengthening activities.

SafeCyber™ can help you along the continuum of your product life cycle management needs. Our offerings range from self-assessments to cloud-based enterprise security solutions to support complex connected and regulated environments.

Learn more

Digital access to human factors engineering tools

For manufacturers of medical devices and technologies, human factors engineering (HFE) and usability are key components when it comes to developing safe and effective products. Many healthcare regulators have established HFE requirements, but building in-house HFE expertise is difficult and time-consuming for many medical device companies.

Our Optimal Product Usability Suite (OPUS™) helps manufacturers leverage cloud-based training, tools, expertise and regulatory guidance in order to meet regulatory HFE expectations as well as incorporate HFE and usability more closely into their product design and development activities.

Visit OPUS

Optimize wire and cable product design and manufacturing processes

The Cimteq by UL Solutions suite of software empowers wire and cable manufacturers to plan, control and streamline the design and manufacturing process, enhancing product safety and easing compliance challenges. From optimizing manufacturing operations using the latest Industrial Internet of Things (IIoT) technology, to simplifying the complex management of cable design data to the delivery of the full bill-of-materials into Enterprise Resource Planning (ERP) – our software helps small and large businesses achieve their digital transformation ambitions.

Visit Cimteq by UL Solutions

 

For more information on how UL Solutions can help you design for regulatory and product compliance, contact us today.

 

X

Get connected with our sales team

Thanks for your interest in our products and services. Let's collect some information so we can connect you with the right person.

Please wait…
'; let submitButton = $('form.mktoForm .mktoButtonWrap .mktoButton'); submitButton.prop("disabled", true); submitButton.append(loadingHTML); // Ocp-Apim-Subscription-Key: '***'. var $ocpKey = drupalSettings.ul_marketo_validate_key; var $ocpUrl = drupalSettings.ul_marketo_validate_url; var $ocpEnv = drupalSettings.ul_marketo_validate_env; if (submitCount > 1 || isResponseSuccess == true) { isResponseHandled = true; form.submittable(true); if (paramsDebug.debug == 1) { console.log("NO.10 submitCount > 1: form.submit() "); } submitButton.click(); } else { var email = form.vals().Email; var phone = (form.vals().Phone) ? (form.vals().Phone) : '18472728800'; var country = (form.vals().Country) ? (form.vals().Country) : 'United States'; var countryCode = (phone == '18472728800') ? 'US' : getCountryCode(country); var $emailMsg = drupalSettings.ul_marketo_validate.email; var $phoneMsg = drupalSettings.ul_marketo_validate.phone; if (paramsDebug.debug == 1) { console.log("paramsDebug:"); console.log(paramsDebug); } sendingData = JSON.stringify({ 'Input_Email': email, 'Input_Phone': phone, 'Input_ISO2_Country_Code': countryCode }); if (paramsDebug.debug == 1) { console.log('URL, debug missing button:'); console.log($ocpUrl); console.log("Sending Data to API service (ajax):"); console.log(sendingData); } // API call for validate email/phone/country. var sendDate = (new Date()).getTime(); var responseTimeMs = sendDate; // Start a timer to handle a 3-second response timeout setTimeout(function() { if (!isResponseHandled) { isResponseHandled = true; // Handle the assumed "success" due to timeout here if (paramsDebug.debug == 1) { console.log('No response within timeout, proceeding with default validation success.'); } $('#ValidMsgEmail').remove(); $('#ValidMsgPhone').remove(); // set form to be submittable here $('#valSpinner').remove(); submitButton.prop("disabled", false); // Setup status as Timeout instead of Unknown. emailAddressStatus = "Timeout"; phoneNumberStatus = "Timeout"; phoneNumberValidated = "Timeout"; form.vals({ "emailAddressStatus": emailAddressStatus, "phoneNumberStatus": phoneNumberStatus, "phoneNumberValidated": phoneNumberValidated, }); form.submittable(true); isResponseSuccess = true; if (paramsDebug.debug == 1) { let receiveDate = (new Date()).getTime(); responseTimeMs = (receiveDate - sendDate) / 1000; console.log("setTimeout: " + responseTimeMs + " seconds."); } submitButton.click(); } }, paramsDebug.timeout * 1000); //END setTimeout $.ajax({ url: $ocpUrl, type: 'POST', data: sendingData, headers: { 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': $ocpKey, }, success: function (response) { $('#valSpinner').remove(); submitButton.prop("disabled", false); phoneNumberValidated = response.Validated_Phone_Number; if (!isResponseHandled) { isResponseHandled = true; // **** Handle the validation response if (paramsDebug.debug == 1) { console.log("API Response Data: "); console.log(response); } var emailCode = response.Email_Validation_Status_Number; var phoneCode = response.Phone_Validation_Status_Number; // Add values into two status fields. if (emailValidCode.hasOwnProperty(emailCode)) { emailAddressStatus = emailValidCode[emailCode]; } else { // API error code doesn't exist, set defaul. emailAddressStatus = emailValidCode['300']; } if (phoneValidCode.hasOwnProperty(phoneCode)) { phoneNumberStatus = phoneValidCode[phoneCode]; } else { // API error code doesn't exist, set defaul. phoneNumberStatus = phoneValidCode['301']; } if (emailAddressStatus.indexOf("email_not") != -1) { emailAddressStatus = 'Invalid'; } else if(emailAddressStatus == 'valid') { emailAddressStatus = 'Valid'; } if (phoneNumberStatus.indexOf('invalid_') != -1) { phoneNumberStatus = 'Invalid'; } else if(phoneNumberStatus == 'valid') { phoneNumberStatus = 'Valid'; } if (paramsDebug.debug == 1) { console.log('form.emailAddressStatus ' + emailAddressStatus); console.log('form.phoneNumberStatus ' + phoneNumberStatus); console.log('form.phoneNumberValidated ' + phoneNumberValidated); } if (validEmailCode.includes(emailCode) && validPhoneCode.includes(phoneCode)) { // Remove the loading spinner. $('#ValidMsgEmail').remove(); $('#ValidMsgPhone').remove(); $('#valSpinner').remove(); submitButton.prop("disabled", false); if (paramsDebug.debug == 1) { console.log("NO.1.1 VALID OK submitCount = " + submitCount); } isResponseSuccess = true; form.vals({ "emailAddressStatus": emailAddressStatus, "phoneNumberStatus": phoneNumberStatus, "phoneNumberValidated": phoneNumberValidated, }); form.submittable(true); submitButton.click(); } // API valid code is not "valid". else { form.submittable(false); if (paramsDebug.debug == 1) { console.log("NO.1.2 Submittable false : count= " + submitCount + " validateOrigin " + validateOrigin + " isResponseSuccess " + isResponseSuccess ); } // Set the invalid message in language translation. var msgEmailStatus = ""; if (!validEmailCode.includes(emailCode)) { if (emailCode == '300' || emailCode == '400') { msgEmailStatus = $emailMsg.email_not_valid; } else if (emailCode == '310' || emailCode == '500' ) { msgEmailStatus = $emailMsg.email_not_accept; } else { msgEmailStatus = "Unknown"; } if (paramsDebug.debug == 1) { console.log("NOT validEmailCode: " + msgEmailStatus); } errEmail = ''; $('#Email').after(errEmail); form.submittable(false); } // Set the invalid message in language translation. var msgPhoneStatus = "" if (!validPhoneCode.includes(phoneCode)) { msgPhoneStatus = $phoneMsg[phoneValidCode[phoneCode]]; if (paramsDebug.debug == 1) { console.log("NOT validPhoneCode: " + msgPhoneStatus); } errPhone = ''; $('#Phone').after(errPhone); form.submittable(false); } if (paramsDebug.debug == 1) { console.log(msgEmailStatus); console.log(msgPhoneStatus); } // Remove the loading spinner. $('#valSpinner').remove(); submitButton.prop("disabled", false); if (paramsDebug.debug == 1) { console.log("NO.1.6 Submittable false, count= " + submitCount); } form.vals({ "emailAddressStatus": emailAddressStatus, "phoneNumberStatus": phoneNumberStatus, "phoneNumberValidated": phoneNumberValidated, }); // 2nd API call and subit form. if (submitCount >= 1) { $('#ValidMsgEmail').remove(); $('#ValidMsgPhone').remove(); isResponseSuccess = true; form.submittable(true); if (paramsDebug.debug == 1) { console.log("NO.1.8 : 2nd Submit:: submittable=true && count=1 : " + submitCount); } if (submitCount==1) { submitButton.click(); } } } //END if{} else{}. }//END if (!isResponseHandled) // Calculate the time comsumed for the API call. if (paramsDebug.debug == 1) { let receiveDate = (new Date()).getTime(); responseTimeMs = (receiveDate - sendDate) / 1000; console.log("NO.1.9 : AJAX success: Time for API call: " + responseTimeMs + " seconds."); } submitCount++; }, //END success: function(); // API call error response. error: function (error) { $('#valSpinner').remove(); submitButton.prop("disabled", false); if (!isResponseHandled) { isResponseHandled = true; $('#valSpinner').remove(); submitButton.prop("disabled", false); // 2nd API call and subit form. if ( submitCount >= 1 ) { $('#ValidMsgEmail').remove(); $('#ValidMsgPhone').remove(); form.submittable(true); isResponseSuccess = true; if ( submitCount == 1 ) { form.submittable(true); } } // Handle AJAX error if (paramsDebug.debug == 1) { console.log('**** 2 ajax error. submitCount = ' + submitCount); console.log(error); } // Calculate the time comsumed for the API call. if (paramsDebug.debug == 1) { let receiveDate = (new Date()).getTime(); responseTimeMs = (receiveDate - sendDate) / 1000; console.log("NO.2.3 AJAX error: Time for API call: " + responseTimeMs + " seconds."); } } submitCount++; // Error status 500, then submit the form. submitButton.click(); } //END error: function(); }); //END $.ajax; if (isResponseSuccess) { if (paramsDebug.debug == 1) { console.log("NO.8.0 submittable(true)"); } form.submittable(true); } } //END: if (submitCount > 1) else // Setup the form.vals and form.submittable; form.vals({ "emailAddressStatus": emailAddressStatus, "phoneNumberStatus": phoneNumberStatus, "phoneNumberValidated": phoneNumberValidated, }); } //END: if (validateOrigin && (marketoBundle)) else { // For Event form and Newsletter form. if (validateOrigin === true){ form.submittable(true); } } }); //END form.onValidate() // Success callback() form.onSuccess(function(values, followUpUrl){ // Debug Phone/Email validation. if (paramsDebug.debug == 1) { console.log("NO.9.1 onSuccess: submittable = " + form.submittable()); console.log(form.getValues()); } // Track analytics. if (typeof dataLayer !== 'undefined'){ dataLayer.push({ event: drplMkto.dataLayerEvent, mktoFormId: form.getId(), 'FormValues': cleanFormVals(form.getValues()), 'FormFields': form.allFieldsFilled(), 'Submittable': form.submittable() }); } // If function exists, delete UTM cookie: if(typeof _deleteUtmCookie === "function"){ _deleteUtmCookie(); } // Marketo Modal "Thank You" message: if(use_post_submit_mssg){ $('html, body').animate({ scrollTop: 0 }, 'slow'); $('.mkto-presubmit').addClass('hidden'); $('.mktoModalContent').addClass('mkto_thnx_center'); $('.mktoModalMask').addClass('not_clicable'); $('.mkto-postsubmit').removeClass('hidden'); $('.mktoButton').removeAttr('disabled').text(drupalSettings.marketo.button_text); $('.mktoForm')[0].reset(); grecaptcha.reset(); } // Else, redirect user: else { window.location.href = drplMkto.success_url; } // IMPORTANT: Return false to prevent further code execution. return false; }); //END form.onSuccess. }); })(jQuery, drupalSettings.marketo);