Overview
Track app installs back to the Gravity ad that drove them. Three integration paths:Adjust
Gravity is a native partner in Adjust. Enable the integration in Campaign Lab and pick the events to share. No URL templates.
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 (native partner integration)
Gravity is a partner module inside Adjust, so there are no URL templates or macros to hand-assemble. You enable the integration and choose which events to share.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. Sending signup, purchase, and subscription events lets Gravity bid toward users who actually convert.
Before you start
- Adjust access with permission to edit partner setups (Campaign Lab)
- Your Gravity API key, from Settings → Organization in the Gravity dashboard
- A live Gravity campaign with an ad group (you’ll set the Adjust link as its landing page in step 4)
Setup
1
Add Gravity as a partner
In Adjust, go to Campaign Lab → Partners → New partner and select Gravity. Paste your Gravity API key when prompted. Callbacks without a valid key are rejected with
401 and nothing is recorded.2
Pick your app and enable the integration
Select the app you’re advertising and turn the Gravity integration on. Repeat for each app (iOS and Android are separate apps in Adjust).
3
Turn on the in-app events you want optimized
Under Data sharing, enable the in-app events Gravity should optimize toward, typically signup, purchase, and subscription, not just installs.Map each of your Adjust event tokens to the matching event, and make sure revenue is shared for purchase and subscription events so Gravity can optimize on value instead of raw counts.
4
Create the link and set it as your ad group landing page
Create the tracking link in Adjust, then paste that click URL as the landing page on your Gravity ad group. It goes at the ad group level, wherever you’d normally set the landing page. Ads have to point at the Adjust link, since that’s what lets Adjust see the click, carry Gravity’s click ID through the store, and fire the postback back to us.
What to share under Data sharing
Any event you share that isn’t in this list is passed through as-is (lowercased), so custom events 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 smoke-test the endpoint directly:attributed: false is expected for a fake 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 where Gravity isn’t a built-in partner module, configure a postback URL manually. On Adjust, use the native partner integration instead. The URL below is only a fallback if your Adjust account can’t see the Gravity partner.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
- Adjust
- 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, use the native partner integration. It’s a few clicks and gives you event-level data sharing without URL templates. On another MMP, configure the postback URL. 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.

