---
title: Apache Unomi Stories
layout: default
---

<div class="container">

    <div class="jumbotron p-3 p-md-5 text-white bg-primary mt-5">
        <h1 class="display-4">Great Apache Unomi stories!</h1>
        <p class="lead">How and why Apache Unomi is used.</p>
    </div>

    <div class="row mb-5 mt-5">
        <div class="col">
            <h2 class="pb-2 mb-1 font-italic border-bottom">Powered by Apache Unomi</h2>
            <p>Products using Apache Unomi</p>
        </div>
    </div>

    <div class="row m-5">
        <div class="col">
            <h4 class="pb-2 mb-1">Jahia jExperience</h4>
            <p>Jahia is the initial contributor of Apache Unomi and is using it as an engine to integrate content and
                data in their Customer Data Platform (jExperience) and Digital Experience Platform (Jahia) while
                respecting privacy through Unomi's native GDPR support. They are also leading the Customer Data Platform
                specification being worked on at the OASIS Context Server Technical Committee. Apache Unomi is the
                reference implementation of that standard.
            </p>
            <p>"Apache Unomi, thanks to its strong foundation in Apache Karaf and ElasticSearch, is a very modular and,
                completely open and performant CDP engine that is a very important foundation of our products. We love
                Apache Unomi, we work hard to encourage others to adopt it, we are here to help and we are deeply committed
                to helping our customers succeed with it." - Serge Huber, Jahia CTO.</p>
            <a href="https://www.jahia.com" target="_blank">www.jahia.com</a>
        </div>
    </div>

    <div class="row m-5">
        <div class="col">
            <h4 class="pb-2 mb-1">Ninetailed Personalization Platform</h4>
            <p>Ninetailed use Apache Unomi to provide a complete view of the visitors; to discover new visitor segments,
                choose from personalization recommendations, so their customers can test their ideas and grow the
                traffic they already have.</p>
            <p>"Apache Unomi was chosen as our CDP due the logical and plugin architecture, because it is an Apache
                Open Source project and specially because of its Privacy (GPDR consent management) features.
                This lets the user own their data, but also marketers and developers improve the user journey to help
                the users in their decision process and brand experience" - Andy Kaiser, Ninetailed founder</p>
            <a href="https://ninetailed.io/" target="_blank">ninetailed.io</a>
        </div>
    </div>

    <div class="row m-5">
        <div class="col">
            <h4 class="pb-2 mb-1"> Dropsolid - The Digital Experience Company</h4>
            <p>The Dropsolid experience cloud delivers an out of box DXP ready enhanced Drupal CMS, 
               Mautic marketing automation platform and Unomi CDP to build powerful user experiences. 
               Apache Unomi is tightly integrated and gives us smart segments to allow the website builders to diversify or enrich the content based on the surfer. These segments also are used in the marketing automation system. 
               This results in smart mailings to interested groups. 
               Apache Unomi is feeding multiple systems here.</p>

            <p>"Our goal is to make the digital experience as seamless as possible and 
               Apache Unomi was the puzzle piece that fitted perfectly here. 
               As we have a rich contribution history we will certainly try to help the Apache ecosystem improve, where we can. 
               Apache Unomi was the obvious customer data platform to integrate in our DXP solution." - Nick Veenhof, Dropsolid CTO.</p>
            <a href="https://dropsolid.com/en/dropsolid-experience-cloud" target="_blank">dropsolid.com</a>
        </div>
    </div>

    <div class="row mb-5 mt-5">
        <div class="col">
            <h2 class="pb-2 mb-1 font-italic border-bottom">Commercial Support</h2>
            <p>Companies offering commercial support for Apache Unomi</p>
        </div>
    </div>

    <div class="row m-5">
        <div class="col">
            <h4 class="pb-2 mb-1">Yupiik</h4>
            <p>Yupiik is an expert team with a solid experience in digital and information technologies, heavily
                involved in the Apache Software Foundation. Their team are the developers and contributors of many well
                known Apache projects, such as Apache Karaf, Apache ActiveMQ, Apache Camel, Apache Unomi, and many
                more.</p>
            <a href="http://www.yupiik.com/" target="_blank">www.yupiik.com</a>
        </div>
    </div>

    <div class="row mb-5 mt-5">
        <div class="col">
            <h2 class="pb-2 mb-1 font-italic border-bottom">Calling for more stories</h2>
            <p>If you want your own application or solution powered or based on Apache Unomi to be features here, please
                create a
                <a href="https://github.com/apache/unomi-site/blob/master/src/main/webapp/stories.html" target="_blank">pull
                    request on this page</a> or send a message on the <a href="community.html">users mailing list</a>
            </p>
        </div>
    </div>

</div>

