Overview
What it is, what it isn't.
SwedTrack is a mobile attribution platform built into AdswedMedia, for AdswedMedia advertisers only. Like Adjust or AppsFlyer, it tracks installs and in-app events from your mobile apps. Unlike them, conversions don't fire postbacks to third-party ad networks — they bridge straight into the AdswedMedia campaign system that already credits and pays your publishers.
What SwedTrack does: measure installs, attribute them to the original click, fire your in-app events, and tell AdswedMedia internally so the publisher who sent the user gets paid.
What SwedTrack does NOT do: set payouts, manage budgets, expose your data to third parties, or send postbacks to external ad networks. Payout amounts continue to live in your campaign create flow — SwedTrack reads the configured bid and credits the publisher with exactly that amount.
Get started
Six steps from signup to first paid install.
| Step | What you do | Where |
1 | Register your app — name, package name, platform | /advertiser/swedtrack/apps/create |
2 | Copy the app_token and app_secret shown after creation | App detail · SDK tab |
3 | Define in-app events you want to track (purchase, level_5, registration…) | App detail · Events tab |
4 | Create one or more tracking links | App detail · Tracking Links tab |
5 | Integrate the SDK — Android: drop-in Kotlin module. iOS: fire signed HTTP calls directly (no native iOS SDK yet, see Custom HTTP integration in the Android guide for the request shape). | Android guide |
6 | Paste your tracking link with ?user_id=[[userId]] into the URL field of the ManualOffer publishers see | Your campaign / ManualOffer URL field |
Step 6 is the bridge. Without it the SDK still fires installs, but no publisher will be credited because there's no upstream click to match. See
how the bridge works below.
Architecture
How attribution decides who gets credit.
For every install, SwedTrack walks three matching strategies in order. The first match wins. No time windows — a click from any point in time matches if the device IDs line up.
1
Install Referrer (Android — gold standard)
The Play Store passes a referrer string to the freshly installed app containing the original click ID. The SDK reads it via Google's Install Referrer API and we attribute deterministically. No GAID needed.
2
Deterministic GAID / IDFA match
Click row carries the user's advertising ID; the SDK (Android) or your HTTP call (iOS) reports the same ID on first launch. Newest click wins on tie.
iOS note: only available if you fire a signed HTTP install with the IDFA — there is no native iOS SDK to capture it automatically yet.
3
Probabilistic fingerprint
If GAID is unavailable, match by hashed IP + hashed User-Agent. Newest click wins on tie.
0
Organic
No click matched. Install is recorded but no publisher is credited (there is none to credit).
One install per device per app, forever. The first install wins — uninstall + reinstall will be deduplicated against the original install row. This protects publishers from advertisers retroactively rejecting paid installs.
The bridge
How SwedTrack credits publishers automatically.
SwedTrack is built into AdswedMedia, so it skips the external-postback dance entirely. The publisher payout pipeline is the existing AdswedMedia ManualOffer system — SwedTrack just hands off conversions to it.
| # | Step | Who |
1 | Publisher's user clicks your offer in an offerwall | AdswedMedia |
2 | ManualOfferLog is created with a unique user_id token T | AdswedMedia |
3 | User is redirected to your SwedTrack tracking link with ?user_id=T substituted in | AdswedMedia → SwedTrack |
4 | SwedTrack /t/{token} stores T on the click row, redirects user to Play Store / App Store | SwedTrack |
5 | User installs your app, SDK fires the install event | SDK |
6 | SwedTrack attributes the install to the click, resolves the ManualOffer's configured payout | SwedTrack |
7 | Bridge POSTs the conversion into AdswedMedia's manual-offer verifier → ClaimHistory row created → publisher's balance increases | SwedTrack → AdswedMedia |
The URL macro is critical. When you create the ManualOffer that publishers see, paste your SwedTrack tracking link as the destination URL with the upstream token macro:
destination URL
https://pro.adswedmedia.com/t/{your_link_token}?user_id=[[userId]]
AdswedMedia replaces [[userId]] with the publisher's ManualOfferLog.token at click time. SwedTrack stores it, and the bridge uses it later to credit the right publisher. Without the macro, installs are recorded but no publisher is credited.
Per-event deadlines. For events with a deadline (e.g. "complete level 10 in 30 days"), late events are still logged for analytics but flagged is_late=1 and skipped by the bridge — publishers don't get paid for events that arrive past your deadline. Events without a deadline always count.
Anti-tamper
What protects you and your publishers.
| Rule | What it does |
hmac_signature | Every SDK request must be signed with your app_secret using HMAC-SHA256 over the canonical sorted query string plus |nonce|timestamp. Tampered or unsigned requests are rejected with 401. |
timestamp_window | The request timestamp must be within ±10 minutes of server time. Larger drifts are rejected (protects against captured-and-replayed bundles from days/weeks later). |
replay_nonce | Each request needs a unique nonce (8–40 chars). Reused nonces are rejected via a per-app UNIQUE constraint. Nonces expire after 30 minutes; expired rows are cleaned up opportunistically (~10% of requests). |
first_install_only | One install row per (app, gaid|idfa). Uninstall + reinstall does not create a new conversion — the publisher who got the original install keeps the credit. |
event_history_locked | Once an event has fired at least once, the advertiser can no longer delete it (would lose history) and can no longer flip is_unique retroactively. |
upstream_token_validated | The ?user_id=… value is validated against a strict charset; unsubstituted macros and garbage are dropped (treated as organic). |
payout_resolved_server_side | The publisher payout amount comes from the ManualOffer's configured bid, not from anything the SDK or the bridge claims. Advertisers can't pay publishers less than the bid by lying in the SDK payload. |
No time windows anywhere. SwedTrack does not impose 7-day, 30-day, or any other attribution window. The advertiser sets per-event deadlines explicitly when that's part of the offer (e.g. "level 10 in 30 days"). Otherwise, a real install always counts.
Compliance
GDPR + privacy by default.
The SDK is dormant until you call SwedTrack.setUserConsent(true). Before consent no data is collected and no network requests are made.
Stored data per click: ULID click id, link id, app id, GAID or IDFA (if opted in), device model, OS version, language, country code (from Cloudflare CF-IPCountry header), sha1(IP) binary hash, sha1(User-Agent) binary hash, optional pub-side sub1…sub5, and the upstream publisher token. The raw IP and raw User-Agent are never persisted.
Stored data per install: ULID install id, attribution method (referrer/deterministic/fingerprint/organic), GAID/IDFA, device model, OS version, country, click-to-install time, and fraud flags.
Retention: rows are currently kept indefinitely — there is no scheduled cleanup job at this time. If you operate in a region with hard retention limits (GDPR Art. 5(1)(e), CCPA), open a ticket to coordinate deletion.