Turning CRM data into individual email content

The source data captures preferred leagues and teams, the split between bets placed before and during a match, and how recipients combine their selections. We turn those records into individual graphics with short captions in English or German.

The CRM team chooses the widgets and their order in each campaign, working in SAP Emarsys, now SAP Engagement Cloud. Our application supplies the content for each recipient. There is no need to design a separate email for every person.

From the initial concept to the finished widgets

We developed the full concept and visual design. That meant deciding how each metric should appear in an email: what the graphic would communicate, what the accompanying copy needed to explain, and how the layout would work with different amounts of data. These decisions shaped each widget’s design and structure.

We wrote the email HTML and the SAP Emarsys-specific code that places personalised widgets inside the existing campaign template. We also built the application behind them in PHP and Neos Flow. It processes CRM data, connects to SAP Emarsys and the operator’s affiliate API, and generates the graphics used in the emails.

The data determines the caption

The short caption at the foot of a widget is selected from its data. Predefined rules evaluate the metrics, thresholds and relevant combinations of values to choose the appropriate wording. The caption explains the graphic rather than adding a generic line beneath it.

One widget shows the distribution across leagues; another ranks preferred teams. Others show the split between bets placed before and during a match, or how recipients combine several selections in a single bet. The graphic and its caption use the same underlying data.

The wording is written and reviewed in English and German in advance. No language model selects or generates the captions. Each choice follows defined rules, so it can be traced back to the data shown in that widget.

Precalculated statistics and graphics generated on demand

Personal statistics from the CRM export are calculated after import and prepared for the campaign. SAP Emarsys retrieves that content through External Content, using a contact ID to select the right version for each recipient.

Other graphics are generated dynamically from the data they need at that point. These include the doughnut-chart widget and the widget showing the next match. The cache is populated as these dynamic assets are served, not just with images prepared before a campaign goes out.

Live odds beyond the send date

The “Your Match” widget combines the next relevant fixture with current live odds from the operator’s affiliate API. Our application generates the graphic and continues to make updated versions available after the newsletter has been sent. The odds are not fixed to the campaign’s send date.

The updates happen in our application, not through code running inside the inbox. Dynamic images are rendered on the server and delivered through the cache. Sent newsletters can therefore load updated match information while the CRM team continues to use its existing email template.

Simulating a send to hundreds of thousands of recipients

We load-tested the system by simulating an email send to several hundred thousand recipients. That work formed part of our implementation, alongside the widgets, the SAP Emarsys-specific code and the API integrations.

Missing data, Outlook and the campaign template

Three areas particularly shaped the implementation:

Less data without a broken layout
Not every record provides five teams or a clear favourite league. A ranking with three meaningful entries shows three. If the data is insufficient for a component, it is omitted without leaving an empty space.
Email is not a browser window
More complex graphics are rendered as images on the server; simple bars use HTML directly. We built the widgets with table layouts and worked within the existing template’s conventions to make the design work in Outlook too.
The existing template sets the rules
The widgets have their own design, but sit within an existing SAP Emarsys template. We had to account for its global CSS and the way optional blocks are managed. The brand typeface also needed adjusted spacing and image dimensions when rendered on the server, along with the appropriate font licence.

A widget system, not a one-off campaign

Staging and production are separate and access-protected; hosting sits in the client’s account. Changes to the widget set are delivered as new versions, so we can review them without disturbing the live version.

The result connects a data pipeline and custom application logic to the tool the CRM team already uses. It is designed to accommodate more widgets, leagues and sports.

The main point

The CRM team assembles the campaign. Our application supplies personal statistics, captions selected by rules and dynamic graphics built from current match data. Precalculated results and a cache for dynamic content support both types of widget.