cmeta for perk pages
Carry your own tracking values — UTM parameters and your internal ids — from your perk page all the way through to the conversions in your reports.
A cmeta attribute is a key-value pair you attach to a Paylode surface: any
parameter prefixed cmeta_ (your own ids — a user, a plan, a placement), plus
the five standard utm_* marketing parameters. See
Custom attribute for the general
rules. On perk pages the values ride onto the outbound redemption links a
customer clicks, and come back attached to the resulting conversion — that's
how you answer "which of my campaigns, pages, or user segments actually drove
redemptions" using ids you already understand.
There are three levels to pass them at, depending on how you serve the page.
Embed level — data-* attributes
When you embed a perks page, put the values on the
container as data-utm_* / data-cmeta_* attributes:
<div
id="paylode-iframe-container"
data-slug="example-rewards"
data-utm_source="newsletter"
data-utm_campaign="spring-2026"
data-cmeta_user_id="a1b2c3"
data-cmeta_plan="pro"
></div>
The widget also picks up any utm_* or cmeta_* parameter already on the
host page's URL automatically and merges the two sources — so a customer
landing on ?utm_source=newsletter forwards that with no attributes needed.
Use data-* for values the host URL doesn't carry.
Hosted-page level — URL parameters
When you link customers to your Paylode-hosted page, append the parameters to the address you share:
https://example-rewards.perkspulse.com/?utm_campaign=member-email&cmeta_segment=vip
Every channel gets its own tagged link — that's how a newsletter, a QR code, and an in-app link stay distinguishable in your reports.
API level — the perk's click link
Double check this, I thought when we provide cmeta to collection get, we attached it to click url. check this and answer in chat.
When you render perks yourself, the
collection API doesn't take attribution parameters — the perk's click_url
does. Append your cmeta_* / utm_* parameters to the click_url you place
behind the Redeem button (URL-encoded, without altering anything already on
the link):
const redeem = new URL(perk.click_url);
redeem.searchParams.set("cmeta_user_id", "a1b2c3");
redeem.searchParams.set("utm_source", "checkout");
// use redeem.toString() as the Redeem button's href
The click records the attributes, then forwards the customer to the offer as usual.
Where the values come back
Attributes are captured at click time and attached to what follows:
- Click activity — the perk-page click views in your analytics (the
perk_page_clicks_of_*views for each section type, and the unified click views) carry acmetadimension you can group and filter by. - Conversions — every conversion view carries the same
cmetadimension, with the platform's read-back rule applied:cmeta_prefixes are stripped (cmeta_user_id→user_id),utm_*names come back unchanged.
Query both through Analytics — Query your metrics shows the query shape.
Worked example
You run an email campaign and want to know which conversions came from it and tie each one back to the specific customer. On the dashboard page where your perks center is embedded:
<link
rel="stylesheet"
href="https://www.paylode.com/paylodePerkIframe.css"
/>
<div
id="paylode-iframe-container"
data-slug="example-rewards"
data-utm_source="newsletter"
data-utm_campaign="spring-2026"
data-cmeta_user_id="a1b2c3"
></div>
<script src="https://www.paylode.com/paylodePerkIframe.js"></script>
A customer browses, redeems a perk, and later that becomes a conversion. In your
reports that conversion carries utm_source = newsletter,
utm_campaign = spring-2026, and user_id = a1b2c3 — so you can attribute it to
the campaign and to the exact customer who converted.
Troubleshooting
URL-encode your values. The widget joins parameters onto the redemption URL
as-is — it does not encode them for you. A value containing &, =, spaces, or
other reserved characters will break the query string. Encode any value that
isn't plain alphanumeric before you set it.
Keep custom-attribute values short and clean. Custom-attribute names accept letters, numbers, hyphens, and underscores; values must be 255 characters or fewer. A value longer than that is dropped before it reaches your report — it isn't truncated, it simply doesn't arrive.
Container attribute names are normalized to snake_case, so data-utm_source
and data-utm-source both forward as utm_source. Browsers lowercase HTML
attribute names before the widget ever sees them, so don't rely on camelCase
like data-utmSource — write the key with underscores or hyphens.
Related
- Perk Pages overview — what the product does and how this page fits it.
- Custom attribute — what
cmeta_values are and the rules they follow. - Embed a perks page — the install the embed level builds on.
- cmeta for Boost · cmeta for gift cards