Cleaner campaign HTML for Gmail, with a holdout on every send.
Hurdle removes promotional markup and clutter from your scheduled Klaviyo campaigns' HTML, sends your original to a random holdout, and reports the difference in clicks and orders. Your subject, images and visible content don't change.
How it works
- Step 1Connect Klaviyo
The optimizer starts paused, so nothing changes until you turn it on in Settings.
- Step 2Hurdle prepares each scheduled campaign
It makes a cleaned-up copy of the campaign's HTML and reschedules it for the same send time.
- Step 3A random holdout gets your original
15% by default, adjustable. You see the difference in clicks and orders.
What Hurdle changes, and what it doesn't
In the email HTML
- Removes schema.org promotion annotations (ld+json) that mark the email as a promotion, and removes schema.org microdata attributes (itemscope, itemtype, itemprop) from all elements.
- Removes invisible zero-width filler characters used to pad preview text.
- Merges adjacent links that point to the same URL into one, and removes links that have no text or image.
- Removes HTML comments, but keeps Outlook conditional comments.
- Adds an empty alt attribute to clearly decorative images (spacers, tracking pixels, aria-hidden) that have none. Screen readers then skip those images.
- Adds a hidden block of account and order-support text, personalized per recipient, that readers don't see but plain-text and screen-reader clients may show. You can turn it off in Settings.
- Wraps the email in a holdout switch, so recipients in your holdout group get your original email.
What doesn't change
- Subject line and preview text wording
- Visible text and images (unless you turn on the optional "view in browser" removal)
- Audience and send time
- Sending domain and IP
- Your flows (Hurdle works on campaigns only)
Optional, off by default
- Removes "view in browser" and "web version" links, along with the cell, paragraph or block that holds them. This changes visible content.
- Removes utm_*, fbclid, gclid, mc_* and Klaviyo _kx/_ke tracking parameters from links. This affects your own analytics and Klaviyo's onsite identification.
In your Klaviyo account
- Each optimized campaign is briefly reverted to Draft, then rescheduled for the same send time.
- Hurdle assigns a copy of your template to the campaign. Klaviyo stores it as a campaign-specific copy.
- An "[Optimized]" and a "[Hurdle backup]" template are left in your template library.
- Hurdle writes one profile property, inbox_optimizer_bucket (0 to 99), and the time it was assigned.
How the lift is measured
Every profile gets a stable random bucket from 0 to 99, computed from its Klaviyo profile id. Profiles with a bucket below your holdout percent receive your original email; everyone else receives the cleaned-up version.
Hurdle counts each recipient once per metric: clicks, and orders and revenue when your store sends Placed Order events to Klaviyo. Opens are shown but flagged as unreliable, because Apple Mail Privacy Protection and Gmail's image proxy open emails automatically.
Each result shows its confidence interval and p-value, and is marked “not yet significant” until it is.
Profiles that received their bucket after a campaign was prepared are excluded from that campaign's numbers, so the comparison only includes people whose version is known.
Safety
- Skips any campaign within 20 minutes of its send time, or 26 hours for local-time sends. Klaviyo itself blocks changes within 15 minutes.
- Skips A/B tests, smart-send-time and immediate sends, campaigns tagged no-optimize (adjustable), and campaigns without HTML.
- Never changes the subject, audience or send time.
- If a step fails, Hurdle puts your original template back and reschedules. If it can't, it leaves the campaign in Draft rather than send at the wrong time, and the dashboard says so.
- You can pause the optimizer in Settings at any time. Disconnecting revokes Hurdle's Klaviyo access.
Pricing
Priced per connected Klaviyo account, billed monthly. Agencies connect each brand's Klaviyo account to one organization and get one invoice, with one line per connected account; disconnecting an account takes it off the bill.
Pricing coming soon. Connect Klaviyo now and your organization's trial starts when billing launches.
Connect KlaviyoQuestions
- Does my email look different?
- No. Hurdle compares the visible text and images before and after its changes, and leaves a campaign untouched if they differ.
- Which campaigns are skipped?
- Campaigns within 20 minutes of sending (26 hours for local-time sends), A/B tests, smart-send-time and immediate sends, campaigns with your skip tag, and campaigns without HTML. The dashboard lists each skipped campaign and why.
- What permissions does Hurdle request?
accounts:read: Read your account name and default sendercampaigns:read: Read your email campaigns and their schedulescampaigns:write: Revert, re-assign templates on and reschedule campaignstemplates:read: Read the HTML of your campaign templatestemplates:write: Create the optimized and backup templates, and delete them after the campaign sendsprofiles:read: Read profile emails and the bucket propertyprofiles:write: Write the inbox_optimizer_bucket property to profilesevents:read: Read Received, Opened and Clicked Email and Placed Order eventsmetrics:read: Find the ids of those event metricstags:read: Read campaign tags, so tagged campaigns can be skippedlists:read: Read list membership
- Where is my data stored?
- In a Postgres database run by Neon in AWS US East, with the app hosted on Vercel in the United States. Klaviyo access tokens are encrypted. The privacy page lists everything stored.
- What happens when I disconnect?
- Hurdle's Klaviyo access is revoked and it stops touching campaigns. Campaigns it already prepared and that are still scheduled send as prepared. Optimized and backup templates Hurdle hasn't cleaned up yet stay in your Klaviyo account, since it can no longer delete them. Billing isn't live yet.
- Does it work for flows?
- No. Hurdle works on scheduled email campaigns only.