Overview
Track app installs back to the Gravity ad that drove them. Three integration paths:Adjust
Gravity is a dynamic network partner in Adjust. Send us your Adjust tracker link and event tokens; we return a link with the Gravity callbacks attached.
Other MMP postback
AppsFlyer, Kochava, Branch, Singular. Point a postback URL at Gravity. No code on your side.
Server-to-Server
Your backend calls the Gravity Conversions API on install. Full control over data and timing.
How attribution works
- User sees or clicks a Gravity ad, and Gravity captures a unique click identifier
- User lands on your website or App Store page
- User installs and opens your app
- The install is reported to Gravity (via your backend or MMP) with the click identifier
- Gravity attributes the install back to the originating campaign and ad
Gravity attribution does not depend on IDFA, so this works with iOS 14.5+ App Tracking Transparency restrictions.
Option 1: Adjust
Gravity is a dynamic network partner in Adjust. Adjust does not fire callbacks on its own: the callbacks are carried as parameters on the tracker link itself, and Adjust fires them when the install or event happens. There is no Data Sharing screen for Gravity, and Adjust will not prompt you for a Gravity API key. The callbacks carry no key either: they authenticate with the Gravity click ID Adjust echoes back.Share in-app events, not just installs. Gravity optimizes toward whatever you send it, so if all we see is installs, that’s all we can optimize for. Each in-app event needs its own callback on the link (see step 3).
Before you start
- Adjust access to Campaign Lab
- The Adjust event token for every in-app event you want Gravity to see (Adjust → App → Events)
- A live Gravity campaign with an ad group (you’ll set the final link as its landing page in step 4)
Setup
1
Create the tracker link in Adjust
In Campaign Lab, create a link for the Gravity network on the app you’re advertising (iOS and Android are separate apps, so you’ll have one link each). Copy the full click URL, an
https://app.adjust.com/... or https://<yourapp>.go.link/... URL. Not the App Store URL.2
Send Gravity the link and your event tokens
Send your Gravity contact the tracker link(s) plus the event token for each in-app event (trial, signup, purchase, …). We attach the Gravity callbacks and send back the final link. If you’d rather do it yourself, the exact parameters are in Build the link yourself below.
3
Check the final link
The link you get back has one
install_callback= parameter and one event_callback_<event_token>= parameter per in-app event (on a go.link branded link these are adj_install_callback= and adj_event_callback_<event_token>=). Each callback is a URL-encoded copy of the Gravity postback URL. It carries no API key: Gravity accepts the callback because click_id is a click ID Gravity itself issued. A callback whose click_id is unknown is rejected with 401 and nothing is recorded.4
Set it as your ad group landing page
Paste the final link as the landing page on your Gravity ad group. Ads have to point at the Adjust link: on every click Gravity appends its click ID as
click_id (and label) to the link, Adjust stores it, and the callbacks echo it back so the install and events attribute to the ad.Build the link yourself
Append these to your Adjust tracker link. Each callback value is the full Gravity URL, URL-encoded once. Gravity callback (same for install and events):event_callback_ per event token):
https://<yourapp>.go.link/...) Adjust requires the adj_ prefix on every parameter, otherwise it ignores them:
{...} placeholders as-is; Adjust fills them when it fires the callback. {click_id} is the Gravity click ID we append on every click. {event_name} is what tells Gravity which in-app event fired; without it every event arrives as a generic event.
Event mapping
Any other event name is passed through as-is (lowercased, spaces and dashes become
_), so custom events like trial_started still land. They just won’t be normalized into one of the types above.
Verify
Install the app from a real Gravity ad click and confirm the conversion appears in the Gravity dashboard as attributed. To test without a live campaign, follow Adjust’s callback test steps: append your device’s advertising ID to the final link, click it through a Gravity ad soclick_id is real, install and open the app, then trigger the events. To smoke-test the endpoint directly, pass your API key (only in this manual call, never on the link):
attributed: false is expected for a fake click ID. Without api_key, the same fake click ID returns 401 Unknown click_id.
Troubleshooting
Option 2: Server-to-Server
Best when you control the app backend and can capture the click identifier from the ad click URL.Step 1: Capture the click identifier on your landing page
When a user arrives from a Gravity ad, the URL includes agrclid parameter:
Step 2: Pass the click identifier through your deep link
If you use a deep link provider (Branch, Firebase Dynamic Links, or a custom universal link), pass thegrclid as a custom parameter so it survives the Web → App Store → App flow.
Step 3: Report the install
When the user opens your app for the first time, fire a conversion from your backend.- Python
- Node.js
- Swift
- Kotlin
Post-install events
Track in-app purchases and other downstream events with the same pattern:App event types
View-through attribution (no click)
If the user installs without clicking an ad (e.g., they saw the ad but went to the App Store directly), send the event without agrclid. Include the user’s email hash and Gravity will attempt to attribute the install to a recent ad impression.
Option 3: Other MMPs (postback)
For MMPs other than Adjust, configure a postback URL in the MMP’s dashboard. On Adjust the callbacks go on the tracker link instead, see Option 1.Supported MMPs
Setup
1
Configure your click URL
In your MMP’s partner configuration for Gravity, ensure that the click identifier from Gravity’s ad URL is captured by the MMP as a custom parameter. Most MMPs call this
clickid, click_id, or label.2
Add the postback URL
In your MMP dashboard, add Gravity as a postback partner. Use the URL template for your MMP (see examples below).
3
Test the integration
Send a test postback to verify:
Postback URL templates
- AppsFlyer
- Kochava
- Branch
- Singular
MMP event mapping
The postback receiver normalizes common MMP event names:Response format
Both paths return the same structure:FAQ
Do I need IDFA for attribution?
Do I need IDFA for attribution?
No. Gravity does not depend on IDFA for attribution. This works with iOS 14.5+ App Tracking Transparency restrictions. If the user consented to tracking and you have IDFA, you can include it for additional signal, but it’s not required.
What if the user doesn't click the ad?
What if the user doesn't click the ad?
Send the conversion without
grclid but include the user’s email hash (em). Gravity will attempt to attribute the install to a recent ad impression.Can I track post-install events?
Can I track post-install events?
Yes. Use
InAppPurchase (or any custom event name) with action_source: "app". Include custom_data.value for revenue attribution. Use the same grclid from the original install to maintain the attribution chain.Which option should I use?
Which option should I use?
On Adjust, send us your tracker link and event tokens and set the link we return as your ad group landing page. On another MMP, configure the postback URL in the MMP dashboard. S2S gives you full control if you’d rather call the API from your backend with all available data. All three feed into the same conversion pipeline.
Next
Pixel & web conversions
Track web conversions (purchases, signups, etc.).
Conversions API
Send web conversions from your backend.

