6 live links · 99,205 clicks in the demo dataset, last 7 days
Every click,
on the record.
A free link shortener that writes 28 fields into our own Postgres on every redirect. The panel below runs that query for real, over a demo dataset we seeded — the software is live, the visitors are not.
- No account, ever
- No tracking cookies
- 50 links a day per IP
- Raw IPs deleted after 90 days
Live
Not a screenshot. Not real visitors either.
The numbers are a demo dataset we seeded — nobody clicked these links this many times. Everything around them is the product: the shipped code, running its real SQL against the real Postgres table, with the answer never more than a minute old. Open a link in a new tab, come back a minute later, and your own click lands in here on top of it.
gecis.in/ara
Goes to GoogleOpen gecis.in/ara in a new tabClicks
45,677
Unique visitors
31,225
| 2026-09-02 | 7630 |
|---|---|
| 2026-09-03 | 8287 |
| 2026-09-04 | 10582 |
| 2026-09-05 | 6541 |
| 2026-09-06 | 2539 |
| 2026-09-07 | 9516 |
| 2026-09-08 | 582 |
Country
- TR28,164 · 62%
- DE3,600 · 8%
- US2,965 · 6%
- GB1,327 · 3%
- NL1,116 · 2%
Device
- Mobile24,816 · 54%
- Desktop19,288 · 42%
- Tablet1,187 · 3%
- Unknown269 · 1%
- TV65 · 0%
Browser
- Chrome28,747 · 63%
- Mobile Safari7,040 · 15%
- Samsung Internet2,544 · 6%
- Edge2,447 · 5%
- Safari1,598 · 3%
Referrer
- Direct / none19,940 · 44%
- google.com6,109 · 13%
- google.com.tr4,285 · 9%
- instagram.com2,656 · 6%
- t.co2,078 · 5%
What one click records
28 fields, per click, in one row
There is no sampling and no rollup table. A click is a single INSERT into a partitioned click_events table, and every column below is filled from the request itself: the IP, the User-Agent, the Referer header and the query string.
It is written inside after(), once the 308 has already gone out. Analytics cannot slow a redirect down here, because it does not start until the redirect is finished. Measured from inside the cluster, with the network taken out, the origin’s own share of a redirect is 3.0 ms at the 90th percentile and 2.3 ms at the median, pooled over 60 requests from 3 separate runs. Individual requests still land well outside that — the slowest we recorded was 25.9 ms — and this is a warm process on a single node under no load, so read it as the floor rather than a guarantee. What a visitor waits is that plus the round trip to them, and the round trip is nearly all of it.
The raw IP is the one field with a clock on it. A retention job runs every night and clears the address out of every click row older than 90 days — to the second, not to the nearest month. click_events is also partitioned by month, so once an entire month is past retention its partition is dropped whole and the storage that held those addresses is released as DDL rather than by a DELETE somebody has to remember to run. That second step lands up to a month after the first; the clearing is what the 90 days rests on.
- Time
- clicked_atTimestamp
- Identity
- ipIP addresscleared at 90 days
- ip_hashIP hash, daily salt
- visitor_keyVisitor key
- Geography
- countryCountry
- regionRegion
- cityCity
- continentContinent
- latitudeLatitude
- longitudeLongitude
- Device and software
- device_typeDevice type
- device_vendorDevice vendor
- device_modelDevice model
- browserBrowser
- browser_versionBrowser version
- osOperating system
- os_versionOS version
- engineRendering engine
- uaRaw User-Agent
- Source
- refererReferrer domain
- referer_urlReferrer URL
- Campaign
- utm_sourceCampaign source
- utm_mediumCampaign medium
- utm_campaignCampaign name
- utm_termCampaign term
- utm_contentCampaign content
- Classification
- triggerTrigger
- is_botBot flag
Column names as they appear in the schema.
The six links
You can click every one of them
These have been live since launch and they really redirect — a 308 to the destination, not an interstitial and not a preview page.
The counters are the same rows the panel above reads: a seeded demo dataset, plus whatever real clicks these links have picked up since. Nobody clicked them this many times.
Demo datasetSeeded demo rows, not real clicks. The queries, the database and this panel are real.
| Short link | Destination | Clicks | Visitors |
|---|---|---|---|
| /ara | 45,677 | 31,225 | |
| /video | YouTube | 28,441 | 17,925 |
| /pazar | Trendyol | 12,117 | 8,757 |
| /haber | Hürriyet | 7,847 | 6,131 |
| /ucus | Turkish Airlines | 3,258 | 2,179 |
| /kod | GitHub | 1,865 | 1,506 |
These brands are destinations we point at, not partners. No affiliation, no endorsement, and nothing about your visit is shared with them beyond what any redirect sends.
Compare
Five rows, read off their own pages
These are the differences that survive a look at the other vendors’ own documentation — including the one that goes against us: Rebrandly throws the visitor’s IP away immediately, which is stricter than our 90 days. The rows where we lose outright are on the per-competitor pages, not hidden.
A dashed cell is one we could not confirm from the vendor’s own pages — some of them publish their pricing and legal pages as JavaScript only, and a page we cannot read is not a page we can quote. We leave the gap rather than fill it from a review site.
| Capability | gecis.in | Bitly | Dub | Short.io | TinyURL | Rebrandly |
|---|---|---|---|---|---|---|
| Click analytics on the free tier | Supported | Not supported | Supported | Supported | Not verified yet | First 100 clicks a month |
| City-level geography on the free tier | Supported | Not supported | Supported | Supported | Not supported | Not supported |
| Unique visitors, counted without cookies | Supported | Paid plans only | Not supported | Not supported | Supported | Paid plans only |
| Where your click data lives | Our own hardware, Germany | United States | United States | Contested: their own pages disagree | Not verified yet | United States |
| Published raw-IP retention limit | 90 days, then hashes only | Not published | Not published | Click stream kept a year | Not verified yet | Discarded immediately |
- Supported
- Not supported
- Not verified yet
Sources
- https://bitly.com/blog/bitly-free-plan/ checked 2026-09-03
- https://bitly.com/pages/pricing checked 2026-09-03
- https://bitly.com/pages/privacy checked 2026-09-03
- https://developers.rebrandly.com/docs/click-events checked 2026-09-03
- https://docs.short.io/articles/statistics/click-statistics-storage-policy-at-short.io checked 2026-09-03
- https://docs.short.io/articles/statistics/short.io-metrics/does-short.io-count-uniquehuman-clicks checked 2026-09-03
- https://docs.short.io/articles/statistics/short.io-metrics/what-do-statistics-metrics-mean checked 2026-09-03
- https://dub.co/changelog/deduplicate-clicks-tracking checked 2026-09-03
- https://dub.co/help/article/dub-analytics checked 2026-09-03
- https://dub.co/legal/privacy checked 2026-09-03
- https://dub.co/pricing/links checked 2026-09-03
- https://short.io/pricing/ checked 2026-09-03
- https://short.io/privacy/ checked 2026-09-03
- https://tinyurl.com/blog/what-info-captured-dashboard checked 2026-09-03
- https://www.rebrandly.com/data-processing checked 2026-09-03
- https://www.rebrandly.com/pricing checked 2026-09-03
Full comparisons, row by row
FAQ
The questions people actually ask
- Do I need an account?
- No, and you could not make one if you wanted to — there is no account system yet. You paste a URL, you get a short link, and that link keeps working. The trade-off is in the next answer.
- Where do I see the analytics for a link I create?
- Through the API, if you hold a token — and today only the operator does. Every field is recorded against your link from its first click, and the v1 API reads the aggregates back, per link or across an account. What does not exist yet is a way for you to get a credential, because there are no accounts. So if you need a dashboard you can log into this week, we are still not the right tool; say so on the waitlist form and we will let you know when accounts land.
- Can I put my own domain in front of it?
- Not yet. Every link is gecis.in plus a seven-character slug. Custom domains are on the roadmap and we have not put a date on them, so treat it as unavailable when you are deciding.
- Is there an API?
- Yes, as of this release. A versioned REST surface under /api/v1 covers creating links one at a time or in bulk, listing, updating and deleting them, analytics per link and across an account, token management, and QR codes as PNG or SVG. It is documented at /docs/api and machine-readable at /api/v1/openapi.json, and that document is generated from the same schemas the handlers validate with, so the two cannot drift apart. Authentication is one bearer token. The honest caveat: there is no signup, so the only token in existence is the operator’s. Holding one is not a way around anything either — the API runs the same target validation, the same private-range refusal and the same reserved-slug list as the public form. The one older public endpoint, /api/stats/:slug, is still there and still answers only for the six demo links.
- What exactly happens to my visitors' IP addresses?
- The raw address goes into the click row, so a per-IP breakdown is possible, and it is separately hashed with a salt that rotates every day. A nightly retention job clears the raw address out of any click row older than 90 days, and because click_events is partitioned by month, the partition holding those rows is later dropped whole — which releases the storage as well, up to a month after the clearing. What survives is the hash, and a hash does not turn back into an address.
- How do you count unique visitors without cookies?
- The IP hash and a hash of the User-Agent are combined into a visitor key. Five clicks from one person on one day are five clicks and one visitor. The salt rotates at midnight, so the same person tomorrow is a different key — which is the point. It counts a day, it does not follow a person.
- What stops someone shortening a phishing link?
- Cloudflare Turnstile on the create endpoint; 10 links an hour and 50 a day per IP address; a hard refusal of any target that resolves to a private or reserved range, including a hostname that resolves there later; and noindex plus nofollow on every redirect, so we cannot be used to launder SEO. Whatever still gets through, report it and we look within 48 hours.
- Where does this actually run?
- On our own hardware in Germany, with Cloudflare in front of it. Postgres 17, no third-party analytics vendor in the request path, and no data sold or shared for advertising.
- What will it cost?
- Nothing today. There is no payment integration on this site. When the plans open, the waitlist hears first and gets the launch price.
- How fast is the redirect?
- Two numbers, and they measure different things. The server’s own share, timed from inside our cluster against the service address so the internet is out of the picture: median 2.3 ms and 3.0 ms at the 90th percentile, pooled over 60 requests across 3 separate runs to a warm process with nothing else running. The full spread ran from 1.8 ms to 25.9 ms — occasional outliers in the tens of milliseconds are real, a short run simply never samples one, and we would rather publish the ugly maximum than a tidy one we cannot reproduce. That is the part we control and the only figure we will quote as ours. End to end is another matter — from a client in Turkey, through Cloudflare, the median over 10 requests was 282 ms, and almost all of that is the round trip to you, which no shortener can shrink. Both were measured on the same day with scripts/measure-redirect-latency.sh, which is in the repository so you can run it yourself.
- Are the numbers on this page real clicks?
- The clicks are not; everything else is. The panel is filled from a demo dataset we seeded across 90 days, marked in the database with a visitor key that starts with demo: — because six links with three clicks between them tell you nothing about what the product does at volume. The schema, the SQL, the aggregation and the rendering are the shipped ones, running per request against the real table. Real clicks on those links land in the same table and are counted alongside. When accounts ship, your own links will show your own clicks and none of this.
- Do I get a QR code for a link?
- Yes, from the API: PNG or SVG, at a size and error-correction level you choose. The image encodes the short link with qr=1 on the end, which is what makes a scan record itself as a scan rather than as a click. The redirect strips that marker again before sending the visitor on, so the destination never sees it.