Branded short links that survive the spam filter.
You measure clicks, conversions, and CAC. Elido replaces Bitly without losing the audit trail — UTM templates that don't drift, server-side conversion forwarding to Meta CAPI / GA4 / Mixpanel, and a click-to-revenue join that survives ad-blockers.
- UTM templates resolved at link-create time, not click time
- Server-side Meta CAPI / GA4 / Mixpanel forwarding
- Click-ID join survives ad-blockers and Safari ITP
- CSV / Sheets bulk import with column mapping
utm_source{{ channel }}newsletter, paid, organicutm_mediumemailfixedutm_campaignspring_2026campaign defaultutm_content{{ creative }}from CSV column Dutm_term{{ audience.segment }}from Klaviyo segmentelido.me/spring-de?utm_source=newsletter&utm_medium=email&utm_campaign=spring_2026&utm_content=hero_a&utm_term=high_intentHow attribution works
Click → conversion → revenue, without losing the join key.
Pixel-only attribution drops 20-40% of conversions to Safari ITP, ad-blockers, and consent banners. Server-side forwarding closes most of that gap by joining a click-ID we hand you on the redirect, then echoing it forward to whatever ad surfaces care.
- Step 1
Click
elido.me/promo302 to destination + click_id returned in response header.
- Step 2
Click stored
edge → click-ingesterWorkspace + UTMs + click_id land in ClickHouse <5s.
- Step 3
Conversion fires
Stripe / Shopify webhookYour backend POSTs to /v1/conversions with click_id + amount.
- Step 4
Fan-out
Meta · GA4 · MixpanelServer-to-server forward with original UTM context attached.
UTM templates
Tag once. Apply everywhere. Override when reality demands.
A template lives on the workspace or campaign. Variables resolve at link creation, not at click time, so your analytics tool always sees what was intended. Per-link overrides are logged and diffable so you can trace where a UTM diverged from the template two weeks later.
- Workspace defaultsutm_source, medium, campaign, content, term — any subset
- Per-campaign overridesSub-template inherits + replaces named variables
- Per-link overridesLogged with actor + before/after for audit
- Sheets / CSV propagationTemplates apply on bulk import — no formula columns
- Newsletter — weeklysource: newslettermedium: emailcampaign: weekly_2026_w194links
- Paid — Meta retargetsource: metamedium: paid_socialcampaign: retarget_q212links
- Influencer — DACHsource: {{ creator.handle }}medium: partnercampaign: dach_summer28links
- All variables resolved at create time. Override at the link row if reality demands.
Server-side forwarding
One conversion event. Three ad surfaces. No client-side pixel.
Your checkout fires a webhook to /v1/conversions with the click-ID from the redirect response. We dedupe against the click row, then fan it out to whichever endpoints you have wired — keeping the original UTM context attached.
Hashed email, click_id passthrough, action_source=website
client_id stitched from gclid + first-party cookie
Dedupe per click_id + 5-min insert idempotency
| Destination URL | Channel | Variant | Status |
|---|---|---|---|
| shop.example.com/de/launch | newsletter | hero_a | ok |
| shop.example.com/fr/lancement | newsletter | hero_a | ok |
| shop.example.com/de/launch | paid_social | carousel_v2 | ok |
| blog.example.com/post-launch | organic | — | ok |
| (missing) | newsletter | fallback | URL required |
| shop.example.com/it/lancio | newsletter | hero_b | ok |
Bulk campaign import
Most campaigns start in a spreadsheet. Stop pasting one link at a time.
Upload a CSV or paste from Sheets. The mapper detects destination URL, channel, creative variant, and any UTM overrides; the workspace template fills in the rest. Variants and per-creative slugs are created in one pass, with a preview row before commit.
- Sheets paste, drag-drop CSV, or POST /v1/links/bulk
- Mailchimp + Klaviyo column-set presets
- Per-row error reporting (no partial commits)
- Up to 10,000 rows per upload (Pro), 50,000 on Business
What you can do
- UTM templates resolved at link-create time, not click time
- Server-side Meta CAPI / GA4 / Mixpanel forwarding
- Click-ID join survives ad-blockers and Safari ITP
- CSV / Sheets bulk import with column mapping
- Conversion webhooks from Stripe, Shopify, Chargebee
- A/B variants with z-test confidence on the same short link
What Elido actually gives a marketer
UTM templates and click counts are table stakes. The list below covers the stuff that kills attribution pipelines when it's missing.
UTM auto-tagging that doesn't drift
UTM templates are defined once at the workspace or campaign level, then applied automatically to every link created in that context — whether via the dashboard, bulk import, or API. The template variables are resolved at link-creation time, not at click time, so the value in your analytics tool is always what was intended. You can override per-link when the campaign naming convention breaks (product launches, collab campaigns), and the override is logged so you can trace where a UTM diverged from the template. Export the full link + UTM + click count table to CSV or pipe it directly to Google Sheets via the scheduled-export connector. No more asking 'did someone tag that link?' two weeks after the campaign closed.
A/B testing on slugs without buying a CRO tool
Assign two or more destination URLs to a single short link. Traffic splits by weight (50/50 default, configurable per variant) or by round-robin. Each variant gets its own click time-series so you can see when a variant diverged — useful for dayparting tests. Statistical model is a simple proportion z-test run on the backend; results surface in the dashboard as 'variant A leads with 94% confidence' once you've cleared the minimum sample size (configurable; default 200 clicks per variant). You still need to decide what the test proves — we surface the click data, not a causal inference engine. Edge case: if the underlying landing page has a redirect chain before the conversion pixel fires, conversion attribution may undercount. Document this before reading the result.
Send conversions server-side to Meta CAPI, GA4, and Mixpanel
Client-side pixels miss 20-40% of conversions depending on browser and adblocker mix. Server-side forwarding closes most of that gap. On each click, Elido stores a click ID against the destination URL's workspace. When a conversion event fires on your backend (Stripe webhook, Shopify order webhook, your own checkout), you forward the event to Elido's conversion endpoint with the click ID returned in the click response, the event name, and optional value/currency. Elido deduplicates against the click, then fans the conversion out to whichever server-side endpoints you've configured: Meta Conversions API, GA4 Measurement Protocol, or Mixpanel server-track. Each forwarded event includes the original UTM parameters from the click so attribution survives the full funnel. Setup time is roughly 2 hours if your checkout already emits webhooks. It's not a replacement for a full CDP, but it recovers attribution that pixel-only setups drop entirely.
Bulk import for campaigns that start with a spreadsheet
Most campaign workflows begin in a spreadsheet: column A is destination URL, column B is channel, column C is creative variant. Elido's bulk import accepts that exact CSV format (plus a template download if you're starting fresh). One row per link; optional columns for slug, UTM overrides, tags, folder, expiry, max-clicks cap, and retargeting pixel IDs. The importer validates every row before creating anything — broken URLs, duplicate slugs, missing required fields all surface as a pre-flight error report you can fix before the batch runs. Max 10,000 rows per import via the dashboard; unlimited via the API (with rate limiting). Import history is retained for 90 days so you can trace where a batch came from if questions arise later.
Attach retargeting pixels per link, not per domain
Standard retargeting requires the pixel on the destination page — which you don't own on external affiliate links, partner landing pages, or third-party checkout flows. Elido fires retargeting pixels from the redirect page before bouncing the user to the destination. You can attach Meta Pixel, Google Ads remarketing, LinkedIn Insight Tag, or TikTok Pixel — individually or in combination — at the link level, not just the workspace level. Link-level assignment means different campaigns can fire different pixel audiences from the same custom domain without polluting each other's retargeting pools. Privacy posture: the pixel fires only for users who consented in the redirect interstitial (if enabled) or whose region doesn't require explicit consent under your legal basis. Elido doesn't warehouse the retargeting cookie — the pixel writes directly to the ad platform. Audit the pixel list per link in the dashboard; bulk-assign via CSV or API.
Stack you'll touch
- Custom domains
- Bio pages
- Conversion tracking
- Retargeting pixels
- Branded QR codes
- Campaigns & A/B
What you'll move
- Click attribution
- 100% of links
- Revenue attribution
- Stripe / Shopify
- Setup time
- Under 30 minutes
Marketers running on this
Names are placeholders for now — real customer names land here as case studies are published.
“We rebuilt our Klaviyo link flow with UTM templates in an afternoon. Now every email campaign auto-tags correctly; attribution stopped being a guessing game at the weekly performance review.”
“Server-side Meta CAPI through Elido recovered roughly 30% of our lost conversions after iOS 14.5. Setup took one sprint. It's not magic but it works.”
“We run 200+ affiliate links across three brands. Pixel-per-link means we can retarget readers who clicked any affiliate link without touching the merchant's site. That was not possible with our previous shortener.”
Elido vs Bitly vs Rebrandly for marketers
Three honest options. We highlight real differences, not cherry-picked feature checkboxes. Bitly and Rebrandly are both solid for basic use; the gaps show up at the edges.
| Capability | Elido | Bitly | Rebrandly |
|---|---|---|---|
| UTM templates | Workspace + campaign level; auto-applied | Campaign-level only; manual per link | Link-level; no auto-apply |
| A/B testing on slugs | Weighted split + z-test confidence | No native A/B on links | No native A/B on links |
| Server-side conversions | Meta CAPI, GA4 MP, Mixpanel — deduplicated | Not available | Not available |
| Retargeting pixels per link | Yes — Meta, Google, LinkedIn, TikTok per link | Pixel at domain level only | Pixel at workspace level, not per link |
| Deep-link reach (iOS/Android) | Universal Links + App Links with web fallback | Basic deep-link support | Deep links via integration; iOS parity is good |
| Mobile attribution pass-through | Click ID in query param; MMP webhook wiring manual | Branch partnership for MMPs | MMP integrations documented |
| Export to BI (BigQuery / Snowflake) | Scheduled export + read-only ClickHouse DSN | CSV export; no direct warehouse connector | CSV + API; no native warehouse connector |
Questions marketers ask
Which domains does UTM auto-tagging apply to?
Any link created inside a campaign that has a UTM template attached. The template applies to the short link's click-through parameters, not to the destination URL's query string — your destination URL is unchanged. If the destination already has UTMs, we don't merge or override; the short link's UTM template records the intent independently. Templates resolve workspace defaults → campaign overrides → per-link overrides, in that order.
What's the statistical model for A/B tests?
Two-proportion z-test at the click level. The dashboard shows confidence as a percentage once both variants have cleared the minimum sample size you set (default 200 clicks each). We report raw confidence; we don't apply sequential testing corrections, Bonferroni, or Bayesian posteriors. If you're running a formal experiment with revenue as the outcome, you should run the significance test in your own warehouse with the raw click export — we give you the data, not the causal conclusion.
How long does server-side conversion setup take?
Roughly 2 hours if your backend already emits webhooks on conversion events (Stripe, Shopify, or custom). The integration is: (1) add a query parameter to your short link to capture the click ID at impression, (2) pass the click ID through your checkout session, (3) on conversion, POST to Elido's conversion endpoint with click ID + event + value. Elido handles the fan-out to Meta CAPI, GA4 MP, or Mixpanel. No special SDK required — plain HTTPS POST.
What's the privacy posture on retargeting pixels?
The pixel fires from the Elido redirect page. We expose a consent interstitial (configurable on/off) that gates pixel firing on user acceptance if your legal basis requires it. For EU traffic, you're responsible for ensuring you have a lawful basis for the retargeting fire — we provide the mechanism, not the legal advice. The pixel writes directly to the ad platform; Elido doesn't store pixel audience data or cookie IDs.
What's the bulk import CSV format?
Required column: destination_url. Optional: slug, domain, utm_source, utm_medium, utm_campaign, utm_term, utm_content, tags (comma-separated), folder_id, expires_at (ISO 8601), max_clicks, pixel_ids (comma-separated pixel names). A template CSV downloads from the import dialog. Maximum 10,000 rows per dashboard import; the API accepts unlimited rows in batches of 100 per call, with rate limits per your plan.
How do mobile deep links work across iOS and Android?
Short links that point to app scheme URLs (yourapp://) or HTTPS deep links include Apple Universal Link and Android App Link fallback logic. If the app is installed, the OS intercepts the redirect and opens the app at the right screen. If not, the user lands on the web fallback URL you specify (typically the App Store or web equivalent). You configure the Apple-App-Site-Association JSON and assetlinks.json in the domain settings; Elido serves them at the well-known paths on your custom domain.
Is attribution last-click?
Click data is stored raw — every click event with its UTMs, referrer, device, country, and timestamp. Attribution model is whatever you apply in your analytics tool against the exported data. The dashboard shows last-click attribution by default because that's what most shortener users expect. If you're doing multi-touch or data-driven attribution, export the raw click stream to BigQuery or Snowflake and run your model there.
Can I export click data directly to BigQuery or Looker Studio?
Scheduled export to GCS (then loaded into BigQuery via a native GCS-BQ transfer) is available on Business. Real-time streaming to Kafka / Redpanda is an API-level feature. The Looker Studio connector is on the roadmap but not shipped yet — for now the path is GCS export + BigQuery + Looker. Read-only ClickHouse DSN is available on Business for teams who prefer a direct SQL connection.
Marketer's reading list
Not sure which angle fits?
Most teams start as one and grow into all four. Our sales team can walk through your specific stack in 20 minutes.