Technical documentation
How tracking URLs on track.zapworld.co work, what the tracker reads, and what it guarantees.
URL format
https://track.zapworld.co/<any path>?<tracking parameters>&redirect_url=<destination URL>
Recommended path: /c. The tracker responds to any path in the same way.
Transparency parameter: redirect_url
- Any request to the tracker domain that contains
redirect_urlis handled as a click and redirected to that value. This holds for every path (/,/c,/click,/any/other/path) and every HTTP method. - The tracker redirects directly to that value with an HTTP
302. There are no intermediate hops and no other tracking domains in between. - The destination can never be replaced by a value configured on the server. The service has no destination overrides, rotators or offer switching.
- No secondary parameter is needed to activate the transparency parameter. If one is ever introduced, it will appear before
redirect_urlin the URL. redirect_urlshould be the last parameter in the URL.
Encoding rules
- Encoded value (what Google Ads'
{lpurl}sends): the value runs to the next&and is percent-decoded exactly once. A+is kept as a literal+. - Unencoded value (starts with a literal
http://orhttps://): it must be the last parameter, and everything afterredirect_url=is the destination, used as-is. - Query strings, fragments and encoded values nested inside the destination are preserved byte-for-byte. A double-encoded destination is decoded once only; if the result is not a valid
http(s)URL, the request is refused. - Non-ASCII characters in the destination are percent-encoded (UTF-8) in the
Locationheader, which cannot carry them raw. Browsers apply the same encoding. Hostnames must be sent in ASCII (punycode).
Examples
| Request | Response |
|---|---|
https://track.zapworld.co/c?gclid=abc&redirect_url=https%3A%2F%2Fzapworld.co%2Fcontact%3Fref%3Dad%26n%3D2 | 302 · Location: https://zapworld.co/contact?ref=ad&n=2 |
https://track.zapworld.co/?redirect_url=https://zapworld.co/ | 302 · Location: https://zapworld.co/ |
https://track.zapworld.co/c?redirect_url=https%253A%252F%252Fzapworld.co%252F | 400 (decoded once to https%3A%2F%2Fzapworld.co%2F, which is not a URL) |
https://track.zapworld.co/c?redirect_url=https%3A%2F%2Fexample.org%2F | 403 (not on the allowlist), no redirect |
Validation
The tracker only redirects to destinations it expects. A refused request gets a plain error page and no redirect; it is never sent to another destination instead.
| Status | When |
|---|---|
400 | redirect_url is empty or malformed. The scheme is not http or https (for example javascript:, data:, tel:, app deep links, or no scheme). The host is an IP address or localhost. The URL contains a username or password. It contains spaces or control characters. |
403 | The destination host is not on the allowlist. A host is allowed when it equals an allowlisted domain or is a subdomain of one (www.zapworld.co matches zapworld.co; zapworld.co.evil.com and evilzapworld.co do not). |
The allowlist currently contains only websites operated by Zapworld LLC.
Responses
302 FoundwithLocationset to the destination, plusCache-Control: no-store, no-cache, must-revalidate, privateandReferrer-Policy: no-referrer-when-downgrade.GETandHEADbehave identically (HEADhas no body).- The response is the same for every client. Real browsers, Googlebot, AdsBot-Google and any other user agent get the same status and destination. Suspected automated traffic is only flagged in our logs.
- No cookies are set. Each click is written to a click log; a logging failure never blocks or changes a redirect.
- HTTPS only. Plain-HTTP requests are permanently redirected to HTTPS on the same host by the hosting platform.
Nested click trackers
If a destination is itself another click tracker's URL, that tracker must be certified by Google, and its URL must be URL-encoded inside
redirect_url. The tracker never alters a nested tracker's URL or its redirect target.
Parameters
The tracker reads the parameters below and records them in its click log for reporting only. It never adds parameters to the destination and never removes, reorders or changes any part of it. Parameters not listed here are recorded for reporting and never forwarded. We will notify Google before renaming any parameter or adding a new one.
| Parameter | ValueTrack | Description |
|---|---|---|
redirect_url | {lpurl} | Destination (transparency parameter). The tracker redirects to exactly this value. |
cid | {campaignid} | Google Ads campaign ID. |
agid | {adgroupid} | Ad group ID. |
crid | {creative} | Ad (creative) ID. |
kw | {keyword} | Keyword that triggered the ad. |
mt | {matchtype} | Keyword match type (e = exact, p = phrase, b = broad). |
net | {network} | Network the click came from (g = Google Search, s = search partner, d = Display, …). |
dev | {device} | Device type (m = mobile, t = tablet, c = computer). |
loc | {loc_physical_ms} | Geographic location ID of the click. |
gclid | {gclid} | Google click ID. |
wbraid | {wbraid} | Google click identifier for web-to-app measurement (iOS). |
gbraid | {gbraid} | Google click identifier for app measurement (iOS). |
targetid | {targetid} | ID of the keyword, audience or other target that matched. |
placement | {placement} | Website where the ad was shown (Display Network). |
adposition | {adposition} | Position of the ad on the page. |
feeditemid | {feeditemid} | ID of the clicked feed-based asset. |
extensionid | {extensionid} | ID of the clicked asset (extension). |
devicemodel | {devicemodel} | Device model (Display Network). |
loc_interest_ms | {loc_interest_ms} | Location ID of the searched-for location. |
sourceid | {sourceid} | Source ID of the click. |
ifmobile | {ifmobile:[value]} | Set to the given value when the click came from a mobile device. |
ifsearch | {ifsearch:[value]} | Set to the given value when the click came from the Search Network. |
ifcontent | {ifcontent:[value]} | Set to the given value when the click came from the Display Network. |
Google Ads setup
Account-level tracking template:
https://track.zapworld.co/c?cid={campaignid}&agid={adgroupid}&crid={creative}&kw={keyword}&mt={matchtype}&net={network}&dev={device}&loc={loc_physical_ms}&gclid={gclid}&wbraid={wbraid}&gbraid={gbraid}&redirect_url={lpurl}
{lpurl} is placed last, so Google Ads sends it encoded.
Live example
https://track.zapworld.co/c?cid=123&gclid=TEST&redirect_url=https%3A%2F%2Fzapworld.co%2F
Check it without following the redirect:
curl -sI 'https://track.zapworld.co/c?cid=123&gclid=TEST&redirect_url=https%3A%2F%2Fzapworld.co%2F'
Contact
Zapworld LLC · business@zapworld.co