Use Click Country and Device Data to Target Campaigns
What a click's country and device can tell you, where they mislead, and how to turn them into targeting, timing and landing-page decisions.
Each click on a short link tells you roughly where the visitor was (their country) and what they used (device type, operating system, browser). Grouped per placement, that's enough to adjust ad targeting, posting times, language and page format. It won't tell you who the person is, and it can't send different visitors to different pages.
What the data can tell you
SendURL records these for every click:
| Field | Comes from | Example |
|---|---|---|
| Country | Cloudflare's lookup of the visitor's IP address | DE (Germany) |
| Device type, vendor, model | the user agent | mobile, Apple, iPhone |
| Operating system and version | the user agent | iOS 18.6 |
| Browser and version | the user agent | Mobile Safari 18.6 |
| Time | the redirect | 2026-10-14 08:03 UTC |
The full record, including referrer and IP address, is in what SendURL records for every click.
Where it misleads
- Country is the IP's country, not the person's. VPNs, corporate networks that route traffic through one office, and some mobile carriers place visitors elsewhere.
- Tor hides it. Cloudflare marks Tor traffic as
T1(Cloudflare docs); the console shows it as "Tor". - Some clicks have no country. When Cloudflare has no country for an IP it sends
XX, and SendURL leaves the field empty. - No city, no region. SendURL doesn't record either.
- Previews look like visitors. A link preview fetched by a chat app's server carries that server's country and a bot's user agent. Check before you read too much into a cluster of clicks from one data-centre country.
- User agents are trimmed. Browsers report less detail than they used to, so OS and browser versions are approximate.
How to act on it
| What you see | What you can change |
|---|---|
| A country you don't target sends a real share of clicks from one placement | Add it to the ad platform's location targeting, or test a post timed for its daytime |
| Clicks from one placement are mostly mobile | Check the landing page on a phone first; shorten forms; make the main button reachable with a thumb |
| A placement is mostly desktop | Longer pages, comparison tables and downloads are less of a burden |
| Clicks cluster in one country outside your main language | Consider a translated landing page, or at least a currency or shipping note |
| Clicks arrive at a different hour than you post | Move the post; find your best time to post from click data |
The change happens in the ad platform, the scheduler or the page. SendURL doesn't route visitors by country or device: every click on a link goes to the same destination.
A worked example: two placements, by country and device
Pull the clicks for two links and cross-tabulate. This uses the REST API, which pages through clicks 10 at a time (install the two libraries first with pip install pandas requests):
import os
import time
import pandas as pd
import requests
API = "https://api.sendurl.to/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SENDURL_API_KEY']}"}
def clicks(link_id):
params = {"limit": 10}
while True:
res = requests.get(f"{API}/links/{link_id}/clicks", headers=HEADERS, params=params, timeout=10)
res.raise_for_status()
page = res.json()
yield from page["clicks"]
if not page["pagination"]["hasMore"]:
break
params["cursor"] = page["pagination"]["nextCursor"]
time.sleep(0.25) # stay well under the API's rate limit
placements = {"ig-bio": "LINK_ID_1", "newsletter": "LINK_ID_2"}
rows = [
{"placement": name, "country": c["country"], "device": c["device"]}
for name, link_id in placements.items()
for c in clicks(link_id)
]
df = pd.DataFrame(rows).fillna("unknown")
print(pd.crosstab([df["placement"], df["country"]], df["device"]))Replace LINK_ID_1 and LINK_ID_2 with the id of each link (from GET /links). The output looks like this (illustrative numbers):
device desktop mobile tablet
placement country
ig-bio BR 2 41 1
US 6 88 3
newsletter DE 37 9 0
US 64 22 2Read it as: the Instagram bio link is a phone audience, so its landing page should be built for phones first; the newsletter skews to desktop, with a German group large enough to check send time for. For more on pulling and storing click data, see the URL shortener API in Python guide.
Checklist
- One short link per placement, so country and device are per placement
- Look at clicks per placement, not across your whole account
- Discount preview and scanner clicks before drawing conclusions
- Treat country as approximate; don't act on a handful of clicks
- Make the change where it happens (ad targeting, schedule, page), then compare the next campaign
The setup for per-placement links is in how to track link clicks.
Start tracking links free.
Create your first short link with click analytics in seconds. No credit card, no sign-up to start.
Shorten a link