You don't pre-generate a pass for every contact in your CRM. PocketPass uses lazy enrollment: each customer gets a personal install link, and the pass is created the instant they click it and add it to their wallet. Nobody who ignores the link ever becomes a pass you have to manage.
How lazy enrollment works
When you connect a CRM and Refresh customers, PocketPass writes a personal install link onto each contact. Send that link, and the customer's pass is created the moment they open it and add it to their wallet - not before. This keeps your pass list to the people who actually carry one.
PocketPass then writes back onto the same contact:
- the Apple Wallet and Google Wallet links for the pass, and
- an "installed" Yes/No flag.
So your CRM record shows, per contact, whether they hold a pass and where to send them to get it. You can see the same view per customer at /dashboard/customers.
Add install buttons to your emails
Drop the merge tag for the install page (or the direct Apple/Google links) into an email and it renders as that contact's personal link. Use the block type that lets you paste raw markup.
Klaviyo - into a Text block (raw HTML):
{{ person.PocketPassInstallPageURL }}- the install page (Apple or Google auto-detected){{ person.PocketPassAppleWalletURL }}- Apple Wallet direct{{ person.PocketPassGoogleWalletURL }}- Google Wallet direct
Mailchimp - into a Code block:
*|PPURL|*- the install page*|PPAPPLE|*- Apple Wallet direct*|PPGOOG|*- Google Wallet direct
Me&u Connect - into an HTML block:
{{contact.pocketpassInstallUrl}}- the install page{{contact.pocketpassAppleUrl}}- Apple Wallet direct{{contact.pocketpassGoogleUrl}}- Google Wallet direct
Constant Contact - paste https://getpocketpass.com/e?t=[[custom.pocketpass_token]] as a Button block's destination URL. Constant Contact can only personalize the query part of a link, which is why its link looks different from the others - and why it's one button rather than two (the page it opens offers both wallets). Note that dynamic links don't render in Preview or a test send; schedule a real send to yourself to check it.
Campaign Monitor - paste [PocketPassLink,fallback=] as a Button's link destination. It's one button rather than two (the page it opens offers both wallets), and the fallback= part isn't optional - Campaign Monitor's personalization syntax requires it. The four PocketPass fields belong to the list you nominated, so build the email against that list or the tag resolves to nothing.
ActiveCampaign - add a Text block, switch it to source view, and paste the button HTML. The tags are %POCKETPASS_APPLE_URL%, %POCKETPASS_GOOGLE_URL% and %POCKETPASS_LINK%. Unlike Mailchimp and Campaign Monitor these fields belong to your whole account rather than one list, so any campaign can use them - but send to a segment where PocketPass Link isn't blank, or contacts PocketPass hasn't reached yet will get a button that links nowhere.
Omnisend - into a Text or Custom HTML block. The tags are Liquid-style handlebars under contact.customProperties:
{{ contact.customProperties.pocketpass_link }}- the install page{{ contact.customProperties.pocketpass_apple_wallet }}- Apple Wallet direct{{ contact.customProperties.pocketpass_google_wallet }}- Google Wallet direct
The five PocketPass properties are account-wide - any segment or automation can use them - but as with ActiveCampaign, send to a segment where the property isn't blank, or contacts PocketPass hasn't reached yet will render a button that links nowhere.
HubSpot - into a Rich Text module switched to Source mode:
{{ contact.pocketpass_install_url }}- the install page{{ contact.pocketpass_apple_wallet_url }}- Apple Wallet direct{{ contact.pocketpass_google_wallet_url }}- Google Wallet direct
The install page link is the safe default - it detects the device and offers the right wallet. Use the direct Apple/Google links only when you're building separate "Add to Apple Wallet" and "Add to Google Wallet" buttons.
Which template a customer gets
Two things decide the template, and one always wins.
Template rules (automatic). Map a CRM list or segment to a template. When a customer enrolls, PocketPass walks the rules and uses the first match, so order your rules from most specific to most general. Rules read the same audiences covered in Lists, tags & segments from your CRM.
Per-customer override (manual). On a customer's page under /dashboard/customers you can set the template for that one person. The per-customer choice always wins - it overrides whatever the rules would have picked.
An override sticks to that customer even if their CRM audiences change later. Use it for one-off exceptions; use template rules for anything you'd want to apply to a whole group.
One primary template per account
On the templates list one template is marked Primary (star icon). That template does two things:
- It's the fallback when no template rule matches a customer.
- It's the only template whose passes writeback identity to your CRM - the pass ID, the direct Apple/Google Wallet URLs, and the installed Yes/No flag.
The second point matters when you have more than one template. Your CRM contact has a single slot for each PocketPass field - one PocketPassID, one PocketPassAppleWalletURL, and so on. If two templates were both allowed to write, whichever wrote most recently would silently overwrite the other, so {{ person.PocketPassID }} in a Klaviyo email would resolve to one pass and the other would be unreachable.
To avoid that, only the primary template writes. Non-primary templates still work perfectly: customers still get their passes, and their install link (PocketPassInstallPageURL) still points to the right template - that URL is written by the customer sync and is template-agnostic. What non-primary passes don't get is a per-contact PocketPassID or direct wallet URL you can use in a marketing email.
Template rules can route customers to non-primary templates. If your rule sends VIP contacts to a "VIP tier" template that isn't primary, those contacts won't get PocketPassID or direct wallet URLs on their CRM record. Their install link still works, so they can still add their pass - but a Klaviyo email using {{ person.PocketPassID }} will render blank for them, and direct "Add to Apple Wallet" buttons in marketing emails won't work.
Choose your primary template to be the one you send the most emails against. If most customers are being routed away from primary by rules, make the routed-to template your primary instead.
Changing the primary template
On the Pass templates list, hover any non-primary template and choose Set as primary. It takes effect immediately for every future pass. Existing passes' writeback records aren't rewritten retroactively - if you promote a template that previously wasn't writing back, its next writeback trigger (a new install, an install state change) will fill in the CRM record.
Where to go next
- Connect your CRM: Klaviyo, Mailchimp, Me&u Connect, HubSpot, Constant Contact, Campaign Monitor, ActiveCampaign, or Omnisend.
- Lists, tags & segments from your CRM - the audiences template rules read.
- Choosing an audience - targeting the passes you've created.