Home Traffic & Attribution

Traffic & Attribution

Goran Culibrk
By Goran Culibrk
• 3 articles

Traffic Hub

The Traffic hub is where all data about how merchants discover and install your app comes together. It draws on two sources: your BigQuery/GA4 export (sessions, events, attribution) and your uploaded Shopify Ad Performance reports (spend, impressions, clicks). Use the tab bar at the top to move between views. Prerequisite: Connect BigQuery All Traffic hub tabs require an active BigQuery connection. Session counts, channel attribution, conversion funnels, and keyword traffic come from your GA4 BigQuery export. See Connect BigQuery or Connect BigQuery via Service Account if you haven't set this up yet. App Store Ads data additionally requires uploading your Shopify Ad Performance CSV. See App Store Ads. How the Traffic hub is structured | Tab | What it shows | | --- | --- | | Traffic Sources | Sessions and installs by channel with a conversion funnel | | Attribution | Multi-model attribution across five models | | Campaigns | UTM campaign performance | | GA4 Analytics | Raw GA4 event data and user metrics | | App Store Ads | Ad spend, keyword ROI, cannibalization analysis | Traffic Sources The Traffic Sources tab (the hub landing) shows where your sessions and installs come from, broken down by traffic channel. Traffic channels Ranksy maps GA4 traffic_source_type values to named channels: | Channel | Meaning | | --- | --- | | App Store (organic) | Organic search within the Shopify App Store | | App Store Ads | Paid sponsored placement in the App Store (search_ad surface) | | Category Ads | Sponsored placement in App Store categories | | Direct | Direct URL visits with no referrer | | Organic Search | Google/Bing search referrals | | Organic Social | Social media referrals | | Paid Search | Paid search ads (Google Ads etc.) | | Paid Social | Paid social media ads | | Email | Email campaign referrals | | Referral | Referrals from other websites | Conversion funnel The funnel shows the stages from first visit to install for the selected date range: 1. Pageviews — unique sessions that viewed your app listing 2. Add App Clicks — sessions that clicked the "Add app" button 3. Installs — sessions that completed installation Funnel conversion rates show the step-by-step drop-off percentages. Date range and comparison Use the date picker to select your analysis period. Enable Compare to overlay the equivalent prior period on charts and the channel table. Attribution The Attribution tab applies five attribution models to your install data and shows how credit is distributed across channels depending on which model you choose. Attribution models | Model | How credit is assigned | | --- | --- | | First Touch | 100% credit to the first channel in the conversion path | | Last Touch | 100% credit to the final channel before install | | Linear | Equal credit split across all touchpoints | | Time Decay | More credit to touchpoints closer to conversion | | Position Based | 40% first touch, 40% last touch, 20% split among middle touchpoints | What the Attribution tab shows - Channel attribution — installs credited to each channel under the selected model, with share percentage - Keyword attribution — installs attributed to specific keywords - Conversion paths — the most common multi-step paths users take before installing (up to 500 user paths are sampled) - Model comparison — side-by-side view of all five models for the same period, so you can see where the models agree or disagree - Performance metrics — overall funnel metrics for the attribution window Install reconciliation BigQuery event counts are reconciled to your Partner API install count (the ground truth). If BigQuery and Partner API totals differ, Ranksy distributes the difference across channels proportionally using the largest-remainder method so the total always matches your actual install count. Campaigns The Campaigns tab breaks down traffic by UTM campaign parameters. It shows sessions, installs, and conversion rate per campaign, medium, and source combination. This is useful for tracking paid marketing (Google Ads campaigns, newsletter links, social posts) that drive traffic to your App Store listing with UTM-tagged URLs. GA4 Analytics The GA4 Analytics tab gives you a direct view of your GA4 event data without writing SQL. It shows: - Event counts by event name for the period - Users, sessions, and engagement metrics - Geographic breakdown of sessions - Device category breakdown Data is sourced directly from your BigQuery GA4 export. App Store Ads The App Store Ads tab is covered in detail in its own guide: App Store Ads. In brief, it lets you upload your Shopify Ad Performance CSV reports and compares your paid keyword performance against your organic rankings, classifying keywords as cannibalized, essential, additive, or irrelevant. Data freshness Traffic data is ingested from BigQuery daily. GA4 exports to BigQuery with a typical lag of 24–48 hours, so Traffic hub data is generally 1–2 days behind real time. Intra-day data is not available. FAQ Q: Traffic Sources shows no data — what's wrong? A: Confirm your BigQuery integration is connected and the historical import has completed. Check Settings → Integrations for the import status. BigQuery data takes 1–4 hours on the first import. Q: Why do my session counts differ from what I see in GA4? A: Ranksy reads from your BigQuery export, which processes GA4 data daily. Very recent sessions (last 24–48 hours) may not yet appear. Minor differences in session definitions between the GA4 UI and BigQuery exports are also normal. Q: The Attribution tab shows "Organic Search" as my top channel but I know most traffic is from the App Store. A: Check your GA4 setup. App Store organic traffic should appear as OrganicShopping / "App Store (organic)". If your GA4 is not correctly receiving Shopify App Store traffic data, the source may be miscategorised. See your BigQuery dataset and verify traffic_source_type values. Q: Can I see attribution across more than 500 user paths? A: The conversion paths section samples up to 500 users to keep the analysis fast. Channel-level attribution (the main table) uses all users without sampling. Next steps - App Store Ads — ad spend, True ROAS, cannibalization analysis, and bid recommendations - Connect BigQuery — connect your GA4 export if you haven't already - ASO → Keywords — organic keyword ranking alongside traffic data

Last updated on Aug 13, 2026

App Store Ads

The App Store Ads tab sits inside the Traffic hub and is the home for everything related to your Shopify App Store ad campaigns. It connects three data sources — your BigQuery keyword rankings, your uploaded Shopify Ad Performance CSV reports, and your Partner API revenue — to give you a clearer picture of ad ROI than the Shopify dashboard alone can provide. Prerequisites - BigQuery connected — keyword rankings and organic positions come from GA4 BigQuery data. Without this, the Organic vs Paid and Wasters tabs show no data. - At least one Ad Performance Report uploaded — raw impressions, clicks, and spend come from the search term CSV you export from your Shopify Partners ad dashboard (see Exporting your report from Shopify below). Ranksy does not pull this automatically. Revenue metrics (True ROAS, ad revenue) additionally require your Partner API to be connected. Exporting your report from Shopify Ranksy reads the By search terms export from your Shopify App Store ad campaigns. You export it yourself from the Shopify Partner Dashboard — Ranksy can't pull it automatically. Do this once per campaign. 1. Sign in to your Shopify Partner Dashboard. 2. In the left sidebar, go to Apps, then open App ads. 3. Open the campaign you want to report on (for example, Exact Match Campaign). 4. Set the date range using the date selector at the top of the campaign (for example, Last 7 days). If you plan to upload several reports over time, pick non-overlapping ranges — for example one file per month. Ranksy keeps each period distinct for the Trends and Compare tabs and will reject a report whose dates overlap one you've already uploaded. 5. Click Export in the top-right of the campaign. 6. In the Export report dialog, change the dropdown from By keywords to By search terms. This is the view Ranksy needs — the other options won't import. 7. Tick Include breakdown by country/region, shop plan, and device type. These columns power Ranksy's Geography tab. 8. Click the green Export button. Shopify doesn't download the file directly — it emails the report to you. 9. Open that email and download the CSV. Repeat for each campaign you're running. Each export already includes the app name, campaign name, and date range, so Ranksy automatically matches the file to the right app when you upload it. Uploading a report Click Upload Report in the top-right. Select one or more Shopify Ad Performance CSV files downloaded from your Partners dashboard. Ranksy processes each file in the background and shows upload progress in real time. Once processing is complete, all tabs update automatically. You can upload multiple non-overlapping reports — for example, separate files for January and February — and Ranksy will keep them distinct for the Trends and Compare tabs. Tabs Overview metrics At the top of every tab, a metric row shows totals across all uploaded reports in the current period: | Metric | What it means | | --- | --- | | Impressions | Total times your ad appeared | | Clicks | Total clicks on your ad | | Installs | Installs attributed to ad clicks in the report | | Spend | Total ad spend | | Avg CPC | Average cost per click | | Avg CPI | Average cost per install | Organic vs Paid This is the flagship tab. It joins your BigQuery organic keyword rankings with the ad data from your uploaded reports and shows a side-by-side view for every keyword you're bidding on. Each keyword row shows: - Your organic rank (from BigQuery scraped rankings) - Your sponsored rank (from the ad report) - Ad impressions, clicks, installs, spend - A verdict classifying the keyword into one of four buckets: | Verdict | Meaning | | --- | --- | | Cannibalized | You rank organically in top 1–2 and your ad has less than 50% share — you're paying for clicks you'd likely get for free | | Essential | You don't rank organically (or rank below position 5) — the ad is the only way you appear for this keyword | | Additive | You rank organically but not in the top positions — the ad adds incremental reach | | Irrelevant | The ad ran but drove zero impressions or installs | The summary bar at the top shows counts for each bucket plus key aggregates: True ROAS, total spend, ad revenue, ad installs, paying shops, conversion to paid, cost per paying customer. True ROAS is not estimated — it traces the full chain from BigQuery ad-click events to Partner API transactions for those specific shops, so it reflects real revenue attributed to ads rather than a modelled proxy. Keywords A full paginated table of every keyword in your uploaded reports. You can search and sort by any column: impressions, clicks, CTR, installs, spend, CPC, CPI. Expanding a row shows the individual search terms that triggered that keyword. Wasters Keywords and search terms that are consuming budget without converting. Ranksy classifies a keyword as a waster when it has ad spend but no installs, or when your organic rank is already strong enough that the ad is redundant. Use this tab to find exact-match negatives to add to your campaigns. Insights The Insights tab surfaces four types of actionable recommendations: AI Performance Report — generates a written analysis of your campaign health. Click Generate, wait a few seconds, and download the PDF. The report draws on all your uploaded data plus organic ranking context. Install Attribution — shows what share of installs came from ads versus organic search versus other channels, reconciled to your Partner API install count. Reduce Bid — keywords where you're paying for sponsored placement but your organic rank is already strong (rank ≤ 8 with organic installs outpacing ad installs). Consider lowering your bid or pausing these. Stop Bidding — keywords where organic presence is dominant (rank ≤ 4 with several organic installs, or organic rank ≤ 6) and the ad is adding negligible value. New Opportunities — keywords with impressions and clicks but zero installs. Worth investigating your listing relevance for these terms before deciding whether to keep or pause them. Keep Bidding — keywords where organic rank is weak but the ad is converting. These are the ads earning their spend. Negative Keyword Suggestions — search terms burning budget with no conversions, grouped into themes (category-level broad/phrase negatives) and spend wasters (exact-match negatives). Geography Breaks down ad performance by country and device type. The map and table show impressions, clicks, installs, CPI, and install rate per market. Hero cards compare your app average install rate and CPI to the app-wide benchmark for each geo. Use this to find markets where your ads are converting unusually well (double down) or unusually poorly (review pricing, listing localisation, or add geo-exclusions). Campaign Trends Select a specific campaign to see its performance across multiple uploaded reports over time. Each row is one report period with delta indicators showing period-over-period changes for impressions, clicks, installs, and spend. Requires at least two non-overlapping reports for the same campaign to show trends. Compare Periods Select any two uploaded reports to compare keyword-level changes between them. The summary row shows aggregate deltas for impressions, clicks, installs, and spend. The table lists every keyword with both periods' numbers and percentage changes. Keywords that appeared in only one period are marked New or Removed. Imported Reports history At the bottom of the page, a table lists every report you've uploaded with its status (completed / processing / failed), date range, total impressions, and spend. You can delete individual reports if you uploaded the wrong file. FAQ Q: Why does my True ROAS differ from Shopify's reported ROAS? A: Shopify's ROAS uses last-click attribution from the ad click. Ranksy's True ROAS traces BigQuery search_ad surface events to Partner API transactions for those shops, which means it only counts revenue from shops that both clicked an ad and eventually completed a transaction — a stricter and more accurate measure. Q: My keywords show as Cannibalized — should I pause those ads? A: Not automatically. Cannibalized keywords are ones where you rank organically in top 1–2 with low ad share. Whether to pause depends on your keyword's competitiveness. If a strong competitor is bidding on the same keyword, pausing might let them take the sponsored slot and erode your install share even if your organic rank is strong. Q: Why is my spend showing but the organic vs paid comparison is empty? A: The Organic vs Paid tab requires BigQuery data to supply organic keyword ranks. If BigQuery is not connected, or if no organic ranking data exists for those keywords yet, the verdict column will be empty. Q: Can I upload multiple reports at once? A: Yes. You can select multiple CSV files in the upload dialog and Ranksy processes them in parallel, showing progress for each file. Q: The geography tab is empty. Why? A: Geographic data is a deferred prop loaded after the main page. If it shows a loading spinner for more than a minute, check that your BigQuery connection is active and that your GA4 export includes the country dimension. Next steps - Traffic Sources — organic traffic by channel and session breakdown - Attribution — multi-model attribution for installs across all channels (Traffic hub → Attribution tab) - Keyword Rankings (ASO) — track your organic rank on the keywords you care about

Last updated on Aug 13, 2026

Meta Ads Attribution (Conversions API)

Meta Ads Attribution (Conversions API) Meta ads attribution sends your install and revenue conversions from Ranksy to your Meta pixel through the Conversions API. Meta can then optimize toward merchants who install and pay, rather than toward clicks. The Conversions API solves a problem that is specific to Shopify apps. A merchant clicks your ad in the Facebook or Instagram in-app browser, then installs the app later in a different browser. The click context does not continue to the install, so Meta can miss the conversion. Ranksy sends the conversion from the server instead. What You Need - Shopify Partner API connected. Installs and revenue come from there. Without this connection, Ranksy has no conversions to send. See Connect Partner API. - A Meta pixel (dataset) ID. Use the same pixel as your Shopify listing. - An Events Manager access token for that pixel. Generate the token in Meta Events Manager under Settings → Conversions API → Generate access token. Connect Your Pixel 1. Go to My Apps. Select your app. Click Settings. 2. Open the Meta Conversions API tab. 3. Enter your Pixel / Dataset ID and Access token. 4. Select a Revenue value: - Net (after Shopify fee) is the amount that you keep. This value is the default. - Gross is the full charge before the Shopify fee. 5. Click Save Configuration. Then click Test connection. The tab shows a status badge and the time of the last event send. If a test fails, the tab shows the error message from Meta. Use that message to find and correct the cause. 💡 Ranksy stores the token encrypted. Ranksy never sends the token back to your browser. When you change the settings later, leave the token field blank to keep the existing one. Check That Events Are Landing A successful connection test only shows that your credentials are correct. To confirm that real conversions arrive: 1. Open Meta Events Manager. Select your dataset. 2. Look at the Overview tab for your event names. Lead and Purchase are the default names. Server events show a Server source. 3. Look at Event Match Quality for each event. This score shows whether Meta can connect your conversions to the people who saw your ads. The events do not all arrive at the same time. Ranksy sends an install event as soon as it identifies the store. Revenue can take up to one hour to appear. The Disqualified and Invalid click events follow the rules in Exclude disqualified merchants and invalid clicks. Use the Ranksy Ad Destination URL After the connection, the tab shows a Meta ad destination URL. The URL has this form: apps.ranksyapp.com/your-app/abc123. Use this URL as the destination of your ad. Do not use the App Store link. The URL does three things that a direct App Store link cannot do: - It records the click on the server: IP address, browser, and the Meta click and pixel IDs. Ranksy attaches these signals to the conversion later. Meta uses the signals to match the conversion. - It moves the visitor out of the in-app browser. Facebook and Instagram open links in their own webview. The redirect sends the visitor to the default browser of the device. The listing visit and the install then occur in one browser, and Ranksy can connect them. - It passes your parameters through. Keep your ?utm_… tags on the URL. The tags continue to the Shopify listing. Ranksy also records every ad click. You can then see how many clicks became installs. Shopify does not show this number. Choose the Events You Send Under Events sent to Meta, use the switch for each signal to turn it on or off. Select the Meta event for the signal. Value and currency come from your Partner API revenue. You do not type them. | Signal | Meta event options | Sends when | | --- | --- | --- | | Install | Lead (default), CompleteRegistration | The store passes the selected gate | | Revenue | Purchase, Subscribe, StartTrial | A merchant is charged | | Trial started | StartTrial | A trial starts (apps with trials) | | Subscribed | Subscribe | A subscription starts (apps with subscriptions) | | Qualified install | CompleteRegistration, Lead | An install stays installed for four days | | Disqualified | MerchantDisqualified | A development store, a non-production plan, or a Shopify Trial store not reliably older than seven days | | Invalid click | RanksyInvalidClick | A live assessment finds invalid traffic (off by default) | Install and qualified install When the Install signal maps to Lead, the store must pass each selected gate: - Include only paid Shopify plans: a recognized paid Shopify plan passes. A development or test store fails. An exact Shopify Trial plan passes only when the store is strictly older than seven days at send time. A store that is exactly seven days old fails. A missing or future creation date also fails. - Only fire for stores older than N days: the store creation date must be strictly older than N days. N can be 1 to 30. The default is 4. The store must pass all selected gates. A higher minimum age also applies to an older trial store. For example, a store that is eight days old passes the seven-day trial exception but fails a store-age gate of fourteen days. A recognized paid plan also passes when an old development flag is present. A development or test store fails Lead when the plan is not paid. The Qualified install signal maps to CompleteRegistration by default. It sends only when the install stays installed for four days. Ranksy checks the live status at send time. A frozen, closed, or removed install does not send. This signal shows that the store stayed installed for four days. It does not prove that the merchant will stay. Filter bot stores Freshly created stores that install and stop are a common bot pattern. The Only fire for stores older than N days gate removes these stores. A large value prevents events from more bot stores. It can also delay the event past Meta's seven-day attribution window. The default value is 4. Rename an event If you change the Meta event for a signal, Meta can receive conversions from the last seven days one more time with the new name. Meta removes duplicates only inside the same event name. Events that Meta already received do not change. Exclusion events Ranksy sends two exclusion events: MerchantDisqualified and RanksyInvalidClick. Both are custom event names. Ranksy only sends the events. You apply the exclusions in Meta. MerchantDisqualified The Disqualified signal maps to MerchantDisqualified. Ranksy sends this event only when the store profile was fetched in the last seven days. The profile must show one of these conditions: - The store has the Shopify development flag, or the plan is a recognized non-production plan. - The plan is an exact Shopify Trial plan and the store is not reliably older than seven days. An exact Shopify Trial plan is the plan that Shopify gives to a new store. It is not the same as an app subscription trial. An app subscription trial does not send MerchantDisqualified for the trial reason. The Trial started signal covers app subscription trials, and only apps that have trials show this signal. The manual is_test flag alone, an unknown plan, and the installation status do not send the event. Ranksy sends one event for each store and reason. A recognized paid plan stops the event, even when an old development flag is still present. RanksyInvalidClick The Invalid click signal maps to RanksyInvalidClick. This signal is off by default. Turn on the signal in Events sent to Meta to send it. Ranksy sends the event only for a live assessment with one of these verdicts: - Invalid network: the network has abuse evidence and hosting or datacenter context, and it has Tor or proxy evidence. - Invalid automation: the user agent is an automation client and the network has hosting, proxy, Tor, or abuse evidence. Ranksy does not send the event for a known crawler. A VPN, a proxy, a country, a provider name, or a network risk score alone is not sufficient. A verdict does not prove fraud. Ranksy sends the event only for a tracked click from the last seven days. The oldest hour of that window is not eligible, because Ranksy keeps a one-hour delivery margin. The click and the assessment must fall inside the remaining window. The click must have an fbc value, an IP address, and a user agent, and its provider lookup must occur within 24 hours. The 24-hour value is the freshness limit of the provider data. It is not a delivery delay. When Ranksy checks a tracked click When Ranksy stores a new tracked click, it queues an IP lookup. When Ranksy processes a qualified Lead, it also checks the click that Ranksy matched to the install: - Ranksy keeps an existing assessment. - If a stored lookup exists that is less than 24 hours old, Ranksy classifies the click with no new lookup. - If no recent lookup exists, Ranksy queues the lookup and the delivery. - A live invalid result queues the event delivery promptly. A lookup failure does not stop a qualified Lead. A later backfill assessment never sends an event. Exclude disqualified merchants and invalid clicks To use the two events in Meta: 1. Confirm that Meta received the custom event and that the event is available for audience use. 2. Create an event-based audience in Meta where the event is available. 3. Apply the audience as an exclusion in your ad set. Meta controls these steps, and the Meta interface can change. Ranksy only sends the events. Ranksy does not manage ad sets, audiences, IP lists, billing, or refunds. An invalid-click event never cancels a charge or starts a refund. Audience matching is not guaranteed. Meta decides the members of each audience. How Merchants Get Matched Ranksy sends each match signal that it has. Ranksy hashes the signals where Meta requires it: - The identity of the store and the email of the merchant. A conversion can match even with no ad-click cookie. - The owner name, phone, and location, where your Partner API data has them. - The signals that Ranksy captured at click time, when the visit came through your Ranksy ad destination URL. The click-time signals increase Event Match Quality. Meta optimization uses this score. Point your ads at the Ranksy URL to send these signals. Troubleshooting Revenue sends nothing. If the app has no paying merchants, the revenue signal has no events. The signal starts sending when the first charge arrives. Status shows Error. Open the tab and read the message. The message is the rejection reason from Meta. Generate the access token again in Events Manager, save it, and test again. Conversions arrive but match quality is low. Check that your live ads point at the Ranksy destination URL. Conversions from ads that link directly to the App Store have no click-time signals. No event for a signal. Check that the switch for the signal is on. The Invalid click signal is off by default. Some signals apply only to apps with trials or subscriptions. Turning it off. Disconnect Meta Conversions API at the bottom of the tab stops all events and clears your Pixel ID and token. You can connect again later with the credentials. Related - App Store Ads for keyword-level ROI on your Shopify App Store campaigns - Traffic Hub for where installs come from, organic and paid - Connect Partner API for the install and revenue source behind these events - API reference for sending merchant details and events from your own code, which gives Meta more to match on

Last updated on Sep 14, 2026