S2S / ClickID Tracking

    Cookieless tracking via unique ClickIDs and server-side postbacks — ideal for mobile, apps and maximum tracking reliability.

    ClickID tracking: How it works

    With ClickID tracking, QUALITYCLICK generates a unique ClickID for each click and appends it to the outgoing link. This ID replaces cookie-based attribution and enables cookieless tracking.

    The flow

    1
    Click
    Partner link with ClickID
    2
    Shop
    Store ClickID
    3
    Order
    Customer purchases
    4
    Tracking pixel
    Send back ClickID

    Step 1: Set up click targets with ClickID

    All links under Creatives → Click Targets must contain the ClickID as a URL parameter. Use the placeholder <% CLICKID %>:

    Click target with ClickID
    https://www.your-shop.com/landing?qc_clickid=<% CLICKID %>

    Optionally, you can also include the PartnerID:

    Click target with ClickID and PartnerID
    https://www.your-shop.com/landing?qc_clickid=<% CLICKID %>&qc_pid=<% PID %>

    On click, QUALITYCLICK generates a unique ID in the format QC423840809685489623456289367 (QC prefix + unique string) and redirects the visitor to your shop.

    💡Tip
    The parameter name qc_clickid is a recommendation — you can choose any parameter name (e.g. clickid, affiliate_click etc.). What matters is that your shop correctly receives and stores the value.

    Step 2: Store the ClickID in your shop

    Your shop must read the ClickID from the URL parameter and retain it until the order confirmation. Two options:

    • Session cookie: Store the value in your own cookie or server session
    • URL parameter: Carry the value from page to page as a URL parameter

    Step 3: Pass the ClickID to the tracking pixel

    On the order confirmation page, pass the stored ClickID to the tracking pixel:

    Tracking pixel with ClickID
    https://partner.your-site.com/get_trans.cgi
      ?cpid=1
      &tid=ORD-2026-001
      &clickid=QC423840809685489623456289367
      &produkt=Sale
      &umsatz=95.50

    QUALITYCLICK automatically resolves all information from the original click via the ClickID: PartnerID, SubID, CreativeID, Referrer. This way, the transaction is attributed to the correct partner — without a cookie.

    ⚠️Warning
    If you additionally pass the parameters pid, subid or wmid in the tracking pixel, they override the values from the ClickID. Only pass parameters you can actually populate with values — when in doubt, leave them out.

    Server-to-Server Tracking (S2S)

    With server-to-server tracking, the get_trans.cgi is not called from the customer's browser (client-side), but from your web server (server-side). The call is technically identical — the same URL with the same parameters.

    Advantages of S2S

    • Works even when the customer has disabled JavaScript or images
    • Independent of browser restrictions (ad blockers, cookie blocking)
    • Higher reliability with slow connections or when customers leave the page prematurely

    Recommended strategy: Pixel + S2S as fallback

    We recommend using both methods in parallel:

    1. Client-side pixel (JavaScript or image) on the order confirmation page — captures the transaction instantly in real-time
    2. Server-side S2S call a few seconds later — as a safeguard for cases where the client-side call fails

    QUALITYCLICK automatically detects duplicates based on the TransactionID (tid) and only creates the transaction once.

    PHP example: S2S call with cURL

    PHP: Server-to-Server call
    <?php
    // S2S postback to QUALITYCLICK after order completion
    $params = [
        'cpid'     => 1,                              // Program ID
        'tid'      => 'ORD-2026-001',                  // Your order number (unique)
        'clickid'  => $_SESSION['qc_clickid'] ?? '',   // Stored ClickID
        'produkt'  => 'Sale',                          // Commission product (exact spelling)
        'umsatz'   => 95.50,                           // Net revenue excl. VAT/shipping
    ];
    $url = 'https://partner.your-site.com/get_trans.cgi?' . http_build_query($params);
    
    // Asynchronous call (does not block page rendering)
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
    $response = curl_exec($ch);
    curl_close($ch);
    ?>

    cURL example (command line)

    cURL: Server-to-Server call
    curl -s "https://partner.your-site.com/get_trans.cgi?\
    cpid=1&\
    tid=ORD-2026-001&\
    clickid=QC423840809685489623456289367&\
    produkt=Sale&\
    umsatz=95.50"
    💡Tip
    Set a short timeout (3–5 seconds) for the S2S call so that order processing in your shop is not blocked. The transaction is correctly created in QUALITYCLICK even if the call times out — the data is processed immediately upon receipt.

    Additional parameters

    nocheck — Allow cross-selling

    By default, QUALITYCLICK checks whether the partner is approved for the submitted commission product. If not, the transaction is discarded.

    With the parameter nocheck=1, this check is skipped: the transaction is created even if the customer ordered a different product than what the partner linked to.

    Pixel with nocheck
    https://partner.your-site.com/get_trans.cgi
      ?cpid=1&tid=ORD-2026-001&clickid=QC...&nocheck=1

    Typical use case: Online shops with broad product ranges, where a partner promotes a specific product but the customer buys a different one (cross-selling).

    Testing the tracking

    After setup, you should test thoroughly:

    1. Click a creative of the test partner (PartnerID 2)
    2. Check whether the ClickID arrives correctly in the URL parameter
    3. Complete a test order
    4. Check under Transactions → Edit whether the transaction was created with the correct PartnerID
    5. Check under Transactions → Log whether the call appears in the logs

    If the transaction does not appear, check the transaction log: discarded transactions show a dash "–" instead of a number in the "saved" column.

    Still have questions?
    Our team is here to help with your integration — personally and competently.