What are Smart Elements? How to Use Them
1 What are Smart Elements?
A Smart Element is a container, structure, or stripe in your email template that is connected to an external data source — a web page URL, a JSON file, or a Google Sheet. Instead of manually typing product names, prices, and image URLs into every block, you point your element at a source and MiN8T populates the blocks automatically.
Common use cases:
- Product cards — connect to a product page, pull title, price, image, and CTA link
- Blog digests — connect to your blog, pull the latest post headline, thumbnail, and excerpt
- Event listings — pull event name, date, venue, and ticket link from your events page
- Real estate listings — pull property address, price, photo, and listing URL
- Job boards — connect to your careers page, pull open positions
Smart Elements operate at three hierarchy levels:
- Container — a single column within a structure
- Structure — a row containing one or more containers
- Stripe — a full-width section containing structures
When a Smart Element is active on any of these levels, a SMART badge appears on the element's toolbar in the canvas. The badge is green and visible whenever you hover over or select the element.
Smart Elements support two extraction methods: OG Tags (automatic, zero-config) and CSS Selectors (precise, customizable). You can also connect an AMP Data Source for real-time dynamic content in AMP emails.
2 Method 1: Open Graph (OG) Tags
The fastest way to populate a Smart Element. Most websites already embed Open Graph meta tags for social media previews — MiN8T reads those same tags and maps them to your email blocks.
What Gets Extracted
| OG Tag | Fallback | Maps To |
|---|---|---|
og:title |
twitter:title, then <title> |
Text / Heading block |
og:image |
twitter:image |
Image block |
og:description |
twitter:description, then <meta name="description"> |
Text block |
og:url |
The URL you entered | Button / all links |
og:price:amount |
product:price:amount |
Text block (price) |
og:price:currency |
product:price:currency |
Text block (currency) |
How to Use OG Tag Extraction
- Select a container, structure, or stripe in the editor. Make sure it contains at least one image, text, or button block.
- In the property panel, click the "Data" tab.
- Click "Connect website page".
- Paste the product or article URL and press Enter (or click "Get Data").
- MiN8T fetches the page, reads the OG meta tags, and displays a preview of extracted data: title, image, description, price.
- The extracted values are automatically applied to the blocks in scope — the first text block gets the title, the image block gets the image URL, the button gets the link.
If you have multiple text blocks (e.g., title and description), MiN8T provides dropdown controls to choose which text block receives which value. You can map "title" to the heading block and "description" to the body text block.
What If OG Tags Are Missing?
If a page has no Open Graph meta tags, MiN8T returns a 422 response with a suggestion to try CSS selectors instead. The page's <title> tag is still returned as a fallback. To get richer data from pages without OG tags, use CSS Selectors (next section).
3 Method 2: CSS Selectors
CSS selectors give you precise control over exactly which element on the page to extract data from. Instead of relying on standardized meta tags, you point MiN8T at specific DOM elements using CSS selector syntax.
When to Use CSS Selectors
- The website has no or incomplete OG tags
- You need data not covered by OG tags (e.g., star ratings, review counts, SKU numbers)
- You want to extract from a specific element on the page rather than metadata
- The page has multiple products and you need data from a particular one
Configuring Variables
Each variable defines what to extract from the source page and where to apply it in your email:
- In the Data tab, click "Configure" to enter the variable editor.
- A default "URL" variable is pre-created (required — it applies to all links in the element).
- Click "+ Add Variable" to create additional variables.
For each variable, configure two rules:
External Rule (Source Page)
Tells MiN8T what to read from the external web page:
- CSS Selector — any valid CSS selector, e.g.,
h1.product-title,.price-current span,img.hero-image - Attribute — what to read from the matched element:
textContent— the visible textsrc— image source URLhref— link destinationalt— image alt texttitle— element title attributeinnerHTML— raw HTML content
Internal Rules (Email Template)
Tells MiN8T where to put the extracted value in your email:
- Target block type — which block receives the value (text, image, button, heading, or all-links)
- Target attribute — which property to set (textContent, src, href, alt, title, or innerHTML)
A single variable can target multiple internal rules. For example, a product URL variable could set both the button's href and the image's link wrapper.
Validating Selectors
Click "Check & Save" next to any variable to validate it against the live page. MiN8T fetches the URL and runs your selector, reporting:
- Valid (green) — selector matched, with a preview of the extracted text (truncated to 200 characters)
- Multiple matches (yellow) — selector matched more than one element (first match is used, but you may want to be more specific)
- Invalid (red) — no elements matched this selector
Extracting with Selectors
Once your variables are configured and validated, click "Extract with Selectors". MiN8T fetches the page, runs all selectors, and applies the extracted values to the target blocks in your email. Relative URLs (images and links) are automatically resolved to absolute URLs.
CSS selectors depend on the target website's DOM structure. If the site redesigns, your selectors may break. Validate periodically and update selectors when you notice extraction failures.
4 Dynamic (JS-Rendered) Sites
Some websites render content with JavaScript after the initial HTML loads — single-page apps (React, Vue, Angular), sites with dynamic product carousels, or pages that lazy-load content. Standard HTML fetching sees an empty page because the content hasn't been rendered yet.
MiN8T handles this with a "Dynamic site" toggle in the Data tab. When enabled:
- MiN8T launches a headless Chrome browser via Puppeteer
- Navigates to the URL and waits for network activity to settle (
networkidle2) - Runs your selectors against the fully-rendered DOM
- Images, fonts, stylesheets, and media are blocked during the scrape to speed things up
The dynamic extraction timeout is 15 seconds (vs. 10 seconds for static). If the page's JavaScript hasn't finished rendering within that window, some selectors may return empty results.
Dynamic site mode works with both OG tag extraction and CSS selectors. Toggle it on whenever you get empty results from a page you know has content — it likely renders with JavaScript.
5 The Data Tab
The Data tab appears in the property panel whenever you select a container, structure, or stripe that contains at least one image, text, heading, or button block. It's the central interface for all Smart Element operations.
Data Tab States
State A: Disconnected (empty)
Shows the message "Import data to auto-populate this element" with two options:
- Connect website page — enter a URL, extract via OG tags or CSS selectors
- Connect AMP Data Source — pick from your account-level data sources (for dynamic AMP emails)
State B: Website page connected (OG tags)
Shows the extracted data preview: title, image, description, and price (if found). Mapping dropdowns let you reassign which text block gets which value. A "Refresh" button re-fetches the page. A "Configure" button opens the CSS selector variable editor for more control.
State C: CSS selectors configured
Shows the list of variables with their validation status. Each variable is expandable to reveal its external rule, internal rules, and optional transforms. The toolbar includes "Check & Save", "Extract with Selectors", and "Save Configuration" actions.
State D: AMP Data Source connected
Shows the connected source name, type badge, and endpoint URL. Available field names are displayed as copyable variable badges ({{title}}, {{price}}, etc.). An "Auto-map" button intelligently assigns fields to blocks. A height input controls the amp-list layout height.
6 Auto-Mapping & Variables
Auto-mapping is MiN8T's intelligence layer that matches data fields to email blocks without manual configuration. It works for both OG tag data and AMP Data Source fields.
How Auto-Map Works
When you click "Auto-map" (or when OG data arrives), MiN8T scans all blocks in the selected scope and matches them by type:
| Block Type | Matched Field Names | What Gets Set |
|---|---|---|
| Text / Heading | title, name, heading, text, description, label, subject | Block text becomes {{fieldName}} |
| Image | imgUrl, imageUrl, image, img, src, photo, thumbnail, picture | Image source becomes {{fieldName}} |
| Button (URL) | url, link, href, buttonUrl, cta, action | Button link becomes {{fieldName}} |
| Button (text) | buttonText, ctaText | Button label becomes {{fieldName}} |
Matching is case-insensitive and each field is used only once. If your data source has a field called title and your structure has a heading block and a text block, the heading gets title first.
Variable Badges
When connected to an AMP Data Source, each available field is shown as a badge in the Data tab. Click a badge to copy the mustache variable tag (e.g., {{price}}) to your clipboard. You can then paste it manually into any block's text, image URL, or button link.
Transforms (CSS Selector Method)
When using CSS selectors, each variable supports optional transforms that modify the extracted value before applying it:
- Modifier — a regex pattern to extract a substring (e.g.,
(\d+\.\d{2})to pull a price from "Price: $29.99") - Replacement — the replacement string (e.g.,
$1to use the first capture group) - Format — a number format pattern
- Separator — a separator character for formatted numbers
You don't need to configure transforms for most use cases. They're an advanced feature for cleaning up messy source data — like stripping currency symbols, truncating long descriptions, or reformatting numbers.
7 Save as Smart Element
Once you've connected a data source (website page or AMP Data Source) to a container or structure, saving it as a module preserves the data connection. In the element toolbar, the save button dynamically shows:
- "Save as Smart Element" (with a lightning bolt icon) — when the element has an active smart element configuration
- "Save as Module" (with a bookmark icon) — when the element is a regular static module
Saved Smart Elements appear in your Module Library with their data configuration intact. When you drag a Smart Element from the library into a new template, it comes pre-connected — the URL, selectors, variables, and mappings are all preserved.
What Gets Saved
The full SmartElementConfig is stored with the module:
- Extraction method (OG tags, CSS selectors, or data source)
- Source URL
- Variable definitions with external and internal rules
- Transform configurations
- AMP data source connection (ID, endpoint URL, field names, mapping)
- Dynamic site flag
- Last extraction timestamp
Smart Elements are reusable across templates. Build a product card Smart Element once, save it, and drop it into every promotional email. The data connection stays live.
8 Connecting an AMP Data Source
For real-time dynamic content in AMP emails (Gmail, Yahoo, Mail.ru), Smart Elements integrate directly with MiN8T Data Sources. Instead of extracting data at design time, the email fetches data at open time.
How It Works
- Create a Data Source first (in the Data Sources dashboard). Upload JSON or connect a Google Sheet.
- In the editor, select a container, structure, or stripe.
- Open the Data tab and click "Connect AMP Data Source".
- A dropdown lists all active data sources in your account. Select one.
- The Data tab switches to the connected state showing the source name, field badges, and auto-map button.
- Click "Auto-map" to assign fields to blocks, or drag variable badges manually.
- Adjust the amp-list height (default 360px) to control the rendered area.
What Happens at Export
When you export the template (or send a test email), MiN8T's serializer wraps the Smart Element's HTML in an <amp-list> container:
<amp-list layout="fixed-height" height="360"
width="auto"
src="https://api.min8t.com/emailformdata/v1/list/{hash}/{name}">
<template type="amp-mustache">
<!-- Your product card HTML with {{title}}, {{price}}, etc. -->
</template>
</amp-list>
The required AMP scripts (amp-list and amp-mustache) are automatically injected into the document head. No manual code editing required.
AMP Data Source smart elements only render dynamically in AMP-supporting email clients (Gmail, Yahoo, Mail.ru, FairEmail, AOL). In other clients, the standard HTML fallback is displayed — which contains the static content you designed in the editor.
9 Next Steps
Now that you understand Smart Elements, explore these related guides:
- What are Data Sources? — create JSON or Google Sheets sources for dynamic AMP emails
- How to Test and Export AMP Emails — test Smart Elements in Gmail, export 3-part MIME
- AMP Email Whitelisting Guide — get approved to send dynamic AMP emails
Security Notes
MiN8T applies several protections when extracting data from external URLs:
- SSRF prevention — private IP ranges (10.x, 192.168.x, 127.x), link-local, and reserved ranges are blocked
- DNS rebinding protection — resolved IPs are re-checked against blocked ranges on every redirect hop
- Redirect limit — maximum 5 redirects per request, each validated
- Response size limit — 5MB maximum to prevent memory exhaustion
- Timeout — 10 seconds for static pages, 15 seconds for dynamic (Puppeteer) pages
- Blocked hostnames — localhost, 0.0.0.0, and cloud metadata endpoints are rejected
Last updated: April 2026. All details verified against MiN8T's actual codebase implementation.