Short links, and the story of every click

Put a link on your own domain, then see what happened after it: country, device, referrer, campaign. Kept for as long as the link exists.

Five links free, no card. Analytics on every plan.

Analytics
Full, every plan
History
Kept, any range
Your domain
Live in minutes
Interfaces
Web, REST, MCP

go.example.com/spring

Live

Events

48,204

Clicks

41,867

QR scans

6,337

Visitors

29,512

Countries

  • United States14,203
  • Brazil9,841
  • Germany6,120
  • United Kingdom4,877
  • Japan3,106

Referrers

  • instagram.com12,408
  • Direct9,932
  • newsletter7,215
  • x.com4,180

Browsers

  • Chrome18,902
  • Safari12,744
  • Firefox4,318
  • Edge2,903

How it works

Three steps, and the third is the point

  1. 01

    Point a domain at Lua

    A CNAME, and a certificate that issues in minutes. A subdomain of a domain you already own works, so go.example.com costs nothing extra. Skip it and links work on the shared domain from the start.

  2. 02

    Shorten and publish

    Paste the destination, pick the back-half, tag it. Every link gets a QR code, and can carry an expiry date, a password, or separate iOS and Android destinations.

  3. 03

    Read what happened

    Every click becomes a row: country, region and city, device, browser and OS, referrer, and any UTM parameters. Filter by any of it, over any range.

Shorten

A link people will actually click

A short link hides its destination, so the domain is the only signal the reader gets. Yours says who is asking; a stranger's says nothing, and gets filtered as a category.

How that compares with Bitly

Destination

https://example.com/collections/spring-2026?variant=42

Short link

go.example.com/spring

Copied

Every link has a QR code

Scans are counted apart from clicks, so print and screen never end up in the same number.

What you get

The whole product, not a trial of it

Your domain, not ours

Point a domain at Lua and every link wears your name. It is configuration, not the tier you upgrade to.

Every click, kept

Country, region, city, device, browser, OS, referrer and UTM — over any date range, not a window that quietly drops last year.

QR codes that count

Every link has one, and scans are counted apart from clicks, so print and screen never share a number.

Expiry and passwords

Retire a link on a date, or put a password in front of it. Send people somewhere else on iOS and Android.

Tags and workspaces

Group links by campaign or client, and give a team its own workspace with its own domains.

An API that does everything

The REST API reaches every action the screen does, because both call the same code. Nothing is dashboard-only.

Built for agents

An MCP server ships with it, so an assistant can create a link, tag it and read its analytics with no scraping layer in between.

Run it yourself

Open source and self-hostable. If the record of who clicked what should never leave your infrastructure, it does not have to.

Build on it

Nothing is dashboard-only

The REST API reaches every action the screens do, because both call the same code underneath. An MCP server ships with it, so an assistant can do the same in words.

What developers get
curl -X POST https://lua.sh/api/links \
  -H "Authorization: Bearer $LUA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "go.example.com",
    "key": "spring",
    "url": "https://example.com/collections/spring-2026",
    "utm_source": "newsletter",
    "utm_medium": "email"
  }'

The difference

Rented links, or links you own

Most of what separates one shortener from another comes down to who holds the domain.

On somebody else's domain

  • The domain belongs to somebody else, and so does the trust it carries
  • Analytics stop at whatever window your tier pays for
  • A branded domain is the upgrade, so the link a reader recognises costs extra
  • If the service closes, every link you printed closes with it
  • Generic shortener domains get filtered as a category, not judged one by one

On yours, with Lua

  • The domain is yours, and the mapping is data you hold
  • Every field, every date range, on every plan including free
  • A domain is configuration, not a tier
  • Change providers and every published link keeps resolving
  • Your own domain carries your own reputation, which you can manage

Getting started

Analytics

Self-hosting and developers

Ask AI

Still deciding on a shortener?

Ask a neutral AI to weigh Lua against the alternatives. The comparison pages are public, so it has something real to read.

Make your first link in a minute

Sign up, paste a URL, and watch the clicks arrive. Bring a domain whenever you are ready.