> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allgoodhq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Coming from Marketo or HubSpot: email

> How email templates, content, and personalization map from Marketo and HubSpot to allGood's components, templates, and emails.

If you've built email in Marketo or HubSpot, most of what you know still applies. The big change is where things live. Those platforms keep layout, editable content, and personalization together in one template. allGood splits them into three separate pieces.

## The core difference

In allGood, your layout is built from approved **components**, your words live in a separate **copy document**, and personalization is a **merge field** filled in at send time. Each piece has its own versions and is published on its own. See the [Email overview](https://docs.allgoodhq.com/mk/content/email/index.md).

## Watch out for one naming difference

In Marketo, an **email template** is the layout an email is built on. In allGood, that job belongs to [components](https://docs.allgoodhq.com/mk/content/email/components/index.md). An allGood [email template](https://docs.allgoodhq.com/mk/content/email/templates/index.md) is closer to the **pre-baked email in a program template**: the layout, standard personalization, and default content already in place, ready to clone and edit for each campaign.

## Side by side

| | Marketo | HubSpot | allGood |
| - | - | - | - |
| **Layout** | Email template with modules (`mktoModule`) | Template or module with a `fields.json` schema | [Components](https://docs.allgoodhq.com/mk/content/email/components/index.md) |
| **Starting point for a campaign** | The pre-baked email in a program template, cloned per campaign | A cloned email or saved template | An [email template](https://docs.allgoodhq.com/mk/content/email/templates/index.md): components arranged, personalization built in, defaults shown |
| **Editable content** | Editable elements in the template (`mktoText`, `mktoImg`), edited per email | Module fields, edited per email | A separate copy document, named by the template's [copy schema](https://docs.allgoodhq.com/mk/content/email/templates/writing-the-copy-schema.md) |
| **Personalization** | Lead tokens, and My Tokens (`{{my.tokenName}}`) tied to a folder or program | Personalization tokens and HubL | Merge fields such as `{{ person.firstName }}`. See [Personalizing an email](https://docs.allgoodhq.com/mk/content/email/emails/personalizing-an-email.md) |
| **Design settings** | Template variables, such as a color or width | Module fields | Edit-and-locked boundaries on each component |
| **Reuse across emails** | Clone an email or template | Reusable modules | Copy from the component library. Nothing is included live |
| **Where the words live** | Inside the email's editable elements | Inside the email's module fields | In their own versioned asset, which a landing page can reuse |

> [!NOTE]
>
> Marketo and HubSpot vary by version and setup, so read the first two columns as the common case, not every configuration.

## What carries over

* **Marketers edit words, not layout.** You already rely on this in Marketo's editable elements and HubSpot's module fields. allGood enforces it more strongly, because layout edits are checked against your approved blocks.
* **Tokens still personalize.** A first-name merge with a fallback works the way you expect. See [Personalizing an email](https://docs.allgoodhq.com/mk/content/email/emails/personalizing-an-email.md).

## What's different

* **Copy fields are the closest thing to My Tokens, but they don't inherit.** A copy field belongs to one email's copy document. It doesn't flow down from a folder or program, so shared wording lives on an asset the email depends on. See [Tokens compared](#tokens-compared).
* **Copy is its own asset.** You can review, version, and reuse the words without opening the email.
* **allGood checks compliance for you.** It stops any send that is missing an unsubscribe link or postal address. See [Before an email can send](https://docs.allgoodhq.com/mk/content/email/emails/before-an-email-can-send.md).
* **Variants come from a router.** A/B testing is two versions plus a router, not a separate test tool. See [Copy and variants](https://docs.allgoodhq.com/mk/content/copy-and-variants.md).
* **Layout is written in MJML, the email-building language allGood uses, and allGood handles the rest.** You don't hand-write table-based HTML. The deep-dives below map the syntax.

If you're mid-migration, allGood can send through your existing Marketo instance instead of its own email delivery. Marketo never sees allGood's layout language. allGood fills in your Marketo template's modules for you.

## Tokens compared

Marketo's tokens are grouped by where the value comes from, and so are allGood's merge fields. The first word of each placeholder says which group it belongs to.

| Marketo | allGood | Notes |
| - | - | - |
| `{{lead.First Name}}` and other lead tokens | `{{ person.firstName }}` and the other [`person` fields](https://docs.allgoodhq.com/mk/content/email/emails/merge-field-reference) | Fields are fixed. There's no custom-field token. |
| `{{my.tokenName}}`, set on a folder or program | `{{ asset.copy.content.<field>.value }}` | Defined by the template's copy schema, held in one email's copy, and not inherited. |
| `{{system.unsubscribeLink}}` and other system tokens | `{{ send.unsubscribeUrl }}`, `{{ sender.* }}`, and `send.sentAt` | A year uses `{{ "now" \| date: "%Y" }}`. |
| `{{program.name}}` and other program tokens | Nothing equivalent | Put the value on an asset the email depends on, such as a webinar, and cite it with `{{ asset.<key>.… }}`. |
| `{{company.*}}` | Only `{{ person.companyName }}` | Other company fields aren't available in emails. |

Marketo's token behavior varies by instance, so read this as the common case.

## Template syntax

Building templates, not just emails? [Compare MJML with other email tools](https://docs.allgoodhq.com/mk/developer/email/compare-mjml-with-other-tools.md) maps Marketo templates, HubSpot modules, and hand-coded HTML to allGood's MJML components and copy schema.

## Related articles

* [What an email is](https://docs.allgoodhq.com/mk/content/email/emails/what-an-email-is.md)
* [Email FAQ](https://docs.allgoodhq.com/mk/content/email/faq.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.