{"id":786,"date":"2026-06-29T15:51:43","date_gmt":"2026-06-29T13:51:43","guid":{"rendered":"https:\/\/blog.grasp.gg\/?p=786"},"modified":"2026-06-29T15:51:43","modified_gmt":"2026-06-29T13:51:43","slug":"how-reckitt-automated-digital-campaign-taxonomy-at-global-scale","status":"publish","type":"post","link":"https:\/\/grasp.gg\/blog\/2026\/06\/how-reckitt-automated-digital-campaign-taxonomy-at-global-scale\/","title":{"rendered":"How Reckitt automated digital campaign taxonomy at global scale"},"content":{"rendered":"\n\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Fira+Sans:wght@300;400;500;600;700&#038;display=swap\" rel=\"stylesheet\">\n\n<style>\n  \/* Scoped to .grasp-post to avoid clashing with your WordPress theme *\/\n  .grasp-post *, .grasp-post *::before, .grasp-post *::after { box-sizing: border-box; font-family: 'Fira Sans', sans-serif !important; }\n\n  .grasp-post .hero {\n    background: #133088;\n    padding: 64px 24px 60px;\n    text-align: center;\n    margin-left: calc(-50vw + 50%);\n    margin-right: calc(-50vw + 50%);\n  }\n\n  .grasp-post .hero-logos {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 20px;\n    margin-bottom: 36px;\n  }\n\n  .grasp-post .hero-logos .sep {\n    width: 1px;\n    height: 24px;\n    background: rgba(255,255,255,0.25);\n  }\n\n  .grasp-post .hero-eyebrow {\n    display: inline-block;\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: #7eb3ff;\n    background: rgba(45,98,255,0.20);\n    border: 1px solid rgba(45,98,255,0.35);\n    padding: 5px 14px;\n    border-radius: 20px;\n    margin-bottom: 24px;\n  }\n\n  .grasp-post .hero h1 {\n    font-family: 'Fira Sans', sans-serif;\n    font-size: clamp(24px, 4vw, 40px);\n    font-weight: 700;\n    color: #FFFFFF;\n    line-height: 1.25;\n    max-width: 720px;\n    margin: 0 auto 20px;\n    letter-spacing: -0.016em;\n  }\n\n  .grasp-post .hero h1 span { color: #7eb3ff; }\n\n  .grasp-post .hero-sub {\n    font-size: 16px;\n    color: rgba(255,255,255,0.5);\n    max-width: 500px;\n    margin: 0 auto;\n    font-weight: 400;\n    font-family: 'Fira Sans', sans-serif;\n  }\n\n  .grasp-post .content {\n    max-width: 720px;\n    margin: 0 auto;\n    padding: 52px 24px 80px;\n    font-family: 'Fira Sans', sans-serif;\n  }\n\n  .grasp-post .stats-row {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 12px;\n    margin-bottom: 52px;\n  }\n\n  .grasp-post .stat {\n    background: #FFFFFF;\n    border-radius: 12px;\n    padding: 24px 16px;\n    text-align: center;\n    box-shadow: 0 2px 12px rgba(19,48,136,0.06);\n  }\n\n  .grasp-post .stat-number {\n    font-size: 34px;\n    font-weight: 700;\n    color: #2D62FF;\n    line-height: 1;\n    margin-bottom: 8px;\n    letter-spacing: -0.016em;\n  }\n\n  .grasp-post .stat-label {\n    font-size: 13px;\n    color: #4E6094;\n    line-height: 1.4;\n  }\n\n  .grasp-post .content h2 {\n    font-size: 20px;\n    font-weight: 700;\n    color: #133088;\n    margin: 44px 0 14px;\n    letter-spacing: -0.016em;\n    text-align: left !important;\n  }\n\n  .grasp-post .content p {\n    font-size: 16px;\n    color: #133088;\n    margin-bottom: 18px;\n    line-height: 1.75;\n    text-align: left !important;\n  }\n\n  .grasp-post .problem-list {\n    list-style: none;\n    margin: 0 0 24px;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n  }\n\n  .grasp-post .problem-list li {\n    display: flex;\n    gap: 14px;\n    align-items: flex-start;\n    font-size: 15px;\n    color: #133088;\n    line-height: 1.65;\n    background: #FFFFFF;\n    border-radius: 8px;\n    padding: 14px 16px;\n    box-shadow: 0 2px 12px rgba(19,48,136,0.05);\n  }\n\n  .grasp-post .problem-list li .dot {\n    flex-shrink: 0;\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background: #2D62FF;\n    margin-top: 7px;\n  }\n\n  .grasp-post .before-after {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 12px;\n    margin: 24px 0 36px;\n  }\n\n  .grasp-post .ba-card {\n    border-radius: 8px;\n    padding: 20px;\n  }\n\n  .grasp-post .ba-card.before {\n    background: rgba(241,62,83,0.05);\n    border-left: 3px solid #f13e53;\n  }\n\n  .grasp-post .ba-card.after {\n    background: rgba(45,98,255,0.06);\n    border-left: 3px solid #2D62FF;\n  }\n\n  .grasp-post .ba-label {\n    font-size: 11px;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    margin-bottom: 12px;\n  }\n\n  .grasp-post .ba-card.before .ba-label { color: #f13e53; }\n  .grasp-post .ba-card.after .ba-label { color: #2D62FF; }\n\n  .grasp-post .ba-card ul {\n    list-style: none;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n  }\n\n  .grasp-post .ba-card ul li {\n    font-size: 14px;\n    color: #133088;\n    line-height: 1.5;\n    padding-left: 16px;\n    position: relative;\n  }\n\n  .grasp-post .ba-card.before ul li::before {\n    content: '\u2715';\n    position: absolute;\n    left: 0;\n    font-size: 10px;\n    color: #f13e53;\n    top: 3px;\n    font-weight: 700;\n  }\n\n  .grasp-post .ba-card.after ul li::before {\n    content: '\u2713';\n    position: absolute;\n    left: 0;\n    font-size: 10px;\n    color: #2D62FF;\n    top: 3px;\n    font-weight: 700;\n  }\n\n  .grasp-post .quote-block {\n    margin: 36px 0;\n    padding: 22px 28px;\n    background: rgba(45,98,255,0.05);\n    border-left: 3px solid #2D62FF;\n    border-radius: 0 8px 8px 0;\n    text-align: left !important;\n  }\n\n  .grasp-post .quote-block blockquote {\n    font-size: 15px;\n    font-style: italic;\n    color: #133088;\n    line-height: 1.75;\n    margin-bottom: 12px;\n    border: none;\n    padding: 0;\n    background: none;\n    text-align: left !important;\n  }\n\n  .grasp-post .quote-attribution {\n    font-size: 12px;\n    font-weight: 700;\n    color: #2D62FF;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n    text-align: center !important;\n    display: block;\n  }\n\n  .grasp-post .quote-title {\n    font-size: 12px;\n    font-weight: 400;\n    color: #4E6094;\n    margin-top: 3px;\n    text-align: center !important;\n    display: block;\n  }\n\n  .grasp-post .divider {\n    width: 40px;\n    height: 3px;\n    background: #2D62FF;\n    border-radius: 2px;\n    margin: 44px 0;\n  }\n\n  \/* Full dark CTA \u2014 used at the bottom *\/\n  .grasp-post .cta-block {\n    background: #133088;\n    border-radius: 10px;\n    padding: 20px 28px !important;\n    text-align: center;\n    margin-top: 56px;\n    box-shadow: 1px 0px 18px 0px rgba(38,71,169,0.20);\n  }\n\n  .grasp-post .cta-block h3 {\n    font-size: 15px;\n    font-weight: 700;\n    color: #FFFFFF;\n    margin-bottom: 2px;\n    letter-spacing: -0.01em;\n    line-height: 1.3;\n    text-align: center !important;\n  }\n\n  .grasp-post .cta-block p {\n    color: rgba(255,255,255,0.55);\n    font-size: 13px;\n    margin: 0 0 16px 0;\n    line-height: 1.4;\n    text-align: center !important;\n  }\n\n  @media (max-width: 580px) {\n    .grasp-post .stats-row { grid-template-columns: 1fr 1fr; }\n    .grasp-post .stats-row .stat:last-child { grid-column: span 2; }\n    .grasp-post .before-after { grid-template-columns: 1fr; }\n    .grasp-post .cta-block { padding: 24px 20px; }\n    .grasp-post .cta-inline { flex-direction: column; align-items: flex-start; }\n  }\n\n  \/* Inline CTA \u2014 lighter, doesn't signal end of article *\/\n  .grasp-post .cta-inline {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 20px;\n    background: rgba(45,98,255,0.06);\n    border: 1px solid rgba(45,98,255,0.15);\n    border-radius: 10px;\n    padding: 18px 24px;\n    margin: 32px 0;\n  }\n\n  .grasp-post .cta-inline p {\n    margin: 0;\n    font-size: 14px;\n    color: #4E6094;\n    line-height: 1.5;\n  }\n\n  .grasp-post .cta-inline p strong {\n    color: #133088;\n  }\n\n  .grasp-post .cta-btn {\n    display: inline-block;\n    background: #2D62FF;\n    color: #FFFFFF !important;\n    font-family: 'Fira Sans', sans-serif;\n    font-size: 15px;\n    font-weight: 600;\n    padding: 14px 36px;\n    border-radius: 30px;\n    text-decoration: none !important;\n    white-space: nowrap;\n  }\n\n  .grasp-post .cta-btn-sm {\n    display: inline-block;\n    background: #2D62FF;\n    color: #FFFFFF !important;\n    font-family: 'Fira Sans', sans-serif;\n    font-size: 13px;\n    font-weight: 600;\n    padding: 10px 20px;\n    border-radius: 30px;\n    text-decoration: none !important;\n    white-space: nowrap;\n    flex-shrink: 0;\n  }\n\n<\/style>\n\n<div class=\"grasp-post\">\n\n  <div class=\"hero\">\n    <div class=\"hero-eyebrow\">Customer story \u00b7 Digital campaign taxonomy<\/div>\n    <h1>How Reckitt automated <span>digital campaign taxonomy<\/span> at global scale<\/h1>\n    <p class=\"hero-sub\">From a fragile spreadsheet to a compliance engine embedded directly in media trafficking workflows.<\/p>\n  <\/div>\n\n  <div class=\"content\">\n\n    <div class=\"stats-row\">\n      <div class=\"stat\">\n        <div class=\"stat-number\">57%<\/div>\n        <div class=\"stat-label\">reduction in campaign setup time<\/div>\n      <\/div>\n      <div class=\"stat\">\n        <div class=\"stat-number\">93%<\/div>\n        <div class=\"stat-label\">CNC compliance in top markets<\/div>\n      <\/div>\n      <div class=\"stat\">\n        <div class=\"stat-number\">Global<\/div>\n        <div class=\"stat-label\">rollout across all markets &amp; agency partners<\/div>\n      <\/div>\n    <\/div>\n\n    <h2>The challenge: campaign naming conventions at global scale<\/h2>\n\n    <p>For media teams at a company like Reckitt, campaign naming conventions (CNCs) are the backbone of paid media data. Every campaign tag, every placement name, every taxonomy field is a data point that flows downstream into reporting, attribution models, and AI-powered planning tools.<\/p>\n\n    <p>Reckitt had invested seriously in CNC governance and was already achieving 90%+ compliance across markets. But the infrastructure holding it together was a heavily customised Google Spreadsheet &#8211; and it was becoming a bottleneck:<\/p>\n\n    <ul class=\"problem-list\">\n      <li>\n        <span class=\"dot\"><\/span>\n        <span>Generating a complete CNC for a single campaign took <strong>30 to 90 minutes<\/strong> depending on size &#8211; hours per week pulled directly away from optimisation and strategy work across global trading teams.<\/span>\n      <\/li>\n      <li>\n        <span class=\"dot\"><\/span>\n        <span>The spreadsheet&#8217;s structural limitations &#8211; no multi-select, rigid fields &#8211; meant the taxonomy data captured wasn&#8217;t always fit for strategic analysis or AI use cases downstream.<\/span>\n      <\/li>\n      <li>\n        <span class=\"dot\"><\/span>\n        <span>Maintenance was owned by a single person. Any CNC update &#8211; or their absence &#8211; could introduce errors that couldn&#8217;t be fixed quickly, creating a single point of failure at global scale.<\/span>\n      <\/li>\n    <\/ul>\n\n    <p>With AI-driven media planning central to Reckitt&#8217;s roadmap, the stakes were clear: inconsistent taxonomy data would undermine any intelligence layer built on top of it. The spreadsheet wasn&#8217;t just inefficient &#8211; it was a ceiling.<\/p>\n\n    <div class=\"divider\"><\/div>\n\n    <h2>The solution: taxonomy compliance built into trafficking<\/h2>\n\n    <p>Reckitt implemented Taxo_ by Grasp &#8211; replacing the spreadsheet with a purpose-built digital campaign taxonomy engine that integrates directly into their trafficking workflows. The core shift: instead of checking CNC compliance after a campaign is created, Taxo_ prevents non-compliant campaigns from being trafficked in the first place.<\/p>\n\n    <div class=\"before-after\">\n      <div class=\"ba-card before\">\n        <div class=\"ba-label\">Before Taxo_<\/div>\n        <ul>\n          <li>Manual CNC generation via spreadsheet<\/li>\n          <li>30\u201390 mins per campaign setup<\/li>\n          <li>Compliance checked retroactively<\/li>\n          <li>Single owner, fragile to maintain<\/li>\n          <li>Data gaps limiting analytics &amp; AI<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"ba-card after\">\n        <div class=\"ba-label\">With Taxo_<\/div>\n        <ul>\n          <li>Taxonomy embedded in trafficking workflow<\/li>\n          <li>Setup time cut by 57%<\/li>\n          <li>Non-compliant campaigns blocked at source<\/li>\n          <li>Scalable, team-owned governance<\/li>\n          <li>Structured data ready for AI pipelines<\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n\n    <p>The rollout was significant in scope. CNC adoption is mandatory globally at Reckitt, which meant onboarding internal teams and agency partners across all markets simultaneously &#8211; while maintaining full business continuity through the migration. Reckitt also transitioned to a new CNC version during the rollout, a change that Grasp&#8217;s hyper-care team helped absorb with minimal disruption to live campaigns.<\/p>\n\n    <div class=\"quote-block\">\n      <blockquote>&#8220;Taxo_ seamlessly integrates the creation and adoption of campaign taxonomy into in-platform workflows, meaning that we are now preventing campaigns from being trafficked with an uncompliant naming convention instead of curing them post-launch. The rollout of this capability is a key milestone in our journey to establishing strong media data foundations, which are fundamental to unlocking the full potential of AI-driven solutions.&#8221;<\/blockquote>\n      <div class=\"quote-attribution\">Elisa Carnielli &#8211; Reckitt<\/div>\n      <div class=\"quote-title\">Global Data Driven Marketing and Media Director<\/div>\n    <\/div>\n\n    <div class=\"cta-inline\">\n      <p><strong>Explore Taxo_ by Grasp<\/strong> \u2014 see how CNC compliance gets embedded directly into your trafficking workflow.<\/p>\n      <a class=\"cta-btn-sm\" href=\"https:\/\/taxo.gg\">Explore Taxo_<\/a>\n    <\/div>\n\n    <div class=\"divider\"><\/div>\n\n    <h2>The results: faster operations, stronger data, AI-ready foundations<\/h2>\n\n    <p>Campaign setup time dropped by 57% &#8211; a direct result of removing the manual CNC generation process that had burdened trading teams globally. That time goes straight back into optimisation and strategic work.<\/p>\n\n    <p>Digital campaign taxonomy data quality improved significantly: without the structural constraints of the spreadsheet, teams can now collect the granular metadata that feeds reporting, attribution, and AI-driven planning. CNC compliance held strong at 93% in top markets through the transition, with further gains expected as Reckitt rolls out Taxo_&#8217;s new notification model.<\/p>\n\n    <div class=\"quote-block\">\n      <blockquote>&#8220;Taxo_ has transformed Campaign Naming Convention from a manual, highly time-consuming process into a scalable capability embedded directly within our media workflows. This shift not only drives significant efficiency gains for our teams but also strengthens governance by preventing non-compliant campaigns at the source. It enables us to build robust data foundations that are critical to unlocking advanced analytics and AI-driven decision-making.&#8221;<\/blockquote>\n      <div class=\"quote-attribution\">Luccas Rosa &#8211; Reckitt<\/div>\n      <div class=\"quote-title\">Global Adtech Senior Manager<\/div>\n    <\/div>\n\n    <p>For Reckitt, this is strategic infrastructure. Digital campaign taxonomy is the connective tissue between campaign execution and the intelligence layer above it &#8211; analytics, incrementality testing, and AI-powered planning all depend on data that is consistent, structured, and complete. Taxo_ is how they get there at scale.<\/p>\n\n    <div class=\"cta-block\">\n      <h3>See it in action<\/h3>\n      <p>Book a demo and see how Taxo_ works inside your media trafficking workflow.<\/p>\n      <a class=\"cta-btn-sm\" href=\"mailto:hello@grasp.gg?subject=taxo%20demo&#038;body=Hi%2C%20I%27d%20like%20to%20get%20a%20demo%20of%20taxo\">Get a demo<\/a>\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Customer story \u00b7 Digital campaign taxonomy How Reckitt automated digital campaign taxonomy at global scale From a fragile spreadsheet to a compliance engine embedded directly<\/p>\n","protected":false},"author":4,"featured_media":785,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[37,46,26,23,33,31,45,34,35],"class_list":["post-786","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-bi-data","tag-cnc","tag-compliance","tag-digital-advertising","tag-naming-convention","tag-operational-excellence","tag-success-story","tag-taxonomies","tag-taxonomy"],"jetpack_featured_media_url":"https:\/\/grasp.gg\/blog\/wp-content\/uploads\/2026\/06\/Partnership-Grasp-x-Reckitt-scaled.jpg","_links":{"self":[{"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/posts\/786","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/comments?post=786"}],"version-history":[{"count":1,"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/posts\/786\/revisions"}],"predecessor-version":[{"id":787,"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/posts\/786\/revisions\/787"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/media\/785"}],"wp:attachment":[{"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/media?parent=786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/categories?post=786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grasp.gg\/blog\/wp-json\/wp\/v2\/tags?post=786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}