No Sender Authentication Package, no annotations
Start here, because it kills most projects. Google only renders annotations for sending domains it has allowlisted, and it will not allowlist a shared Marketing Cloud domain. If your Sender Profile is still sending from an SFMC-owned domain rather than a private one delivered through a Sender Authentication Package, the answer is no — not “harder”, no. Buy SAP, or do not start.
With SAP in place you get the private domain, the DKIM key and the reply handling. You still have to put DMARC on that domain yourself, at p=quarantine or p=reject. p=none fails the condition, and nothing in Setup tells you so.
Content Builder deletes the script tag on save
The annotation is JSON-LD inside a <script type="application/ld+json"> block in the email’s <head>. Content Builder sanitises script tags out when you save the asset, so the obvious approach works once in the HTML editor and is gone the next time anyone touches the email.
The way around it is to never store the literal tags. The generator emits the opening and closing tags as AMPscript concatenation inside an %%[ ]%% block, so they are assembled at send time and the saved asset contains nothing for the sanitiser to strip. That is the single detail that separates a working implementation from the three abandoned attempts already in most orgs.
Nine conditions, and SFMC reports on none of them
Preview and Test will not show you an annotation. Neither will Litmus or Email on Acid, because the card is rendered by Gmail from the markup plus the allowlist, not by the HTML. The only real test is a live send of at least 100 recipients with identical image URLs, landing in the Promotions tab of personal Gmail accounts. A send to your own Workspace address proves nothing — Workspace mailboxes never render annotations.
Triggered and 1:1 journeys are out by design: the 100-recipient threshold with one shared image URL rules out personalised image paths, so this belongs on batch promotional sends out of Email Studio, not on transactional Journey Builder activities. Dates must be full ISO 8601 timestamps with an offset and in the future, which means FormatDate with an explicit time zone rather than whatever your business unit defaults to.
What the generator gives you
Enter the deal, the start and end timestamps, the Content Builder image URLs and the brand details. You get the JSON-LD, the AMPscript-wrapped version to paste into the email’s head, a preview of the Promotions tab card, a per-image report on dimensions and aspect ratio, and field-level validation that names the wrong value instead of saying the markup is invalid.
It also drafts the allowlist request to Google’s Promotions outreach address with the details they ask for, so that step does not sit in someone’s drafts for a fortnight.
What’s inside
- The JSON-LD block for the Promotions tab card: PromotionCard, DiscountOffer and Organization
- Output pre-wrapped in AMPscript, so Content Builder does not strip the script tags on save
- A rendered preview of how the card lands in the Promotions tab — which Email Studio Preview and Test will never show you
- An image checker against Google’s rules: HTTPS, PNG or JPEG, 256–4096 px, one ratio across the carousel
- Carousel support up to 10 cards, with the 2–10 rule enforced
- The nine send-day conditions as a checklist — including the SAP and DMARC prerequisites SFMC never flags
- A drafted allowlist request to Google’s Promotions outreach address
- Runs in the browser — your offers, dates and image URLs are not sent anywhere