---
language: "en"
---
# Kelkoo Group Help Center

*

  ## [For Advertisers](https://docs.kelkoogroup.com/for-advertisers.md)

  * [Product data](https://docs.kelkoogroup.com/for-advertisers/product-data.md)
  * [Kelkoo sales tracking](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking.md)
  * [How to use your analytics platform to track Kelkoo Group traffic](https://docs.kelkoogroup.com/for-advertisers/how-to-use-your-analytics-platform-to-track-kelkoo-group-traffic.md)
  * [Merchant Center](https://docs.kelkoogroup.com/for-advertisers/merchant-center.md)
  * [Merchant Statistics API](https://docs.kelkoogroup.com/for-advertisers/merchant-statistics-api.md)
*

  ### [For Publishers](https://docs.kelkoogroup.com/for-publishers.md)

  * [Quick starts](https://docs.kelkoogroup.com/for-publishers/quick-starts.md)
  * [Guides](https://docs.kelkoogroup.com/for-publishers/guides.md)
  * [Shopping API Search](https://docs.kelkoogroup.com/for-publishers/shopping-api-search.md)
  * [Shopping API Feeds](https://docs.kelkoogroup.com/for-publishers/shopping-api-feeds.md)
  * [Shopping API Changes](https://docs.kelkoogroup.com/for-publishers/shopping-api-changes.md)
  * [5 more pages](https://docs.kelkoogroup.com/for-publishers.md)

---
language: "en"
---
# For Advertisers

## Getting Started with KelkooGroup

To launch your KelkooGroup campaigns, please complete the following steps:

* [Submit Your Product Feed](https://docs.kelkoogroup.com/for-advertisers/product-data/product-data-feed.md) - Provide your product catalog in the required format so we can distribute your offers across our network.

* [Install KelkooGroup Sales Tracking (KST)](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking.md) - Implement our tracking solution to enable performance-based pricing.

* [Connect Your Analytics Tool To KelkooGroup](https://docs.kelkoogroup.com/for-advertisers/how-to-use-your-analytics-platform-to-track-kelkoo-group-traffic/connect-your-analytics-tool-to-kelkoogroup.md) - This enables us to proactively compare data, understand discrepancies, and align tracking methodologies.

## Recommended Next Steps

Once your campaign is live, we recommend the following resources to optimize performance and ensure accurate tracking:

* [KelkooGroup \& GA4: A Guide for Accurate Traffic Attribution](https://docs.kelkoogroup.com/for-advertisers/how-to-use-your-analytics-platform-to-track-kelkoo-group-traffic/a-guide-for-accurate-sales-attribution-in-google-analytics-4.md) - Learn how to properly track Kelkoo traffic and purchases in Google Analytics 4, and how to interpret attribution models.

* [KelkooGroup Statistics API](https://docs.kelkoogroup.com/for-advertisers/merchant-statistics-api.md) - Programmatically access your campaign data and performance insights through our API.

---
language: "en"
---
# How to use your analytics platform to track Kelkoo Group traffic

* [Setup Tracking Parameters In Your Product Feed](https://docs.kelkoogroup.com/for-advertisers/how-to-use-your-analytics-platform-to-track-kelkoo-group-traffic/setup-tracking-parameters-in-your-product-feed.md)
* [Understanding Differences Between KelkooGroup Reported Clicks and Your Analytics Data](https://docs.kelkoogroup.com/for-advertisers/how-to-use-your-analytics-platform-to-track-kelkoo-group-traffic/understanding-differences-between-kelkoogroup-reported-clicks-and-your-analytics-data.md)
* [Connect Your Analytics Tool To KelkooGroup](https://docs.kelkoogroup.com/for-advertisers/how-to-use-your-analytics-platform-to-track-kelkoo-group-traffic/connect-your-analytics-tool-to-kelkoogroup.md)
* [A Guide for Accurate Sales Attribution in Google Analytics 4](https://docs.kelkoogroup.com/for-advertisers/how-to-use-your-analytics-platform-to-track-kelkoo-group-traffic/a-guide-for-accurate-sales-attribution-in-google-analytics-4.md)

---
language: "en"
---
# A Guide for Accurate Sales Attribution in Google Analytics 4

Data-Driven Attribution (DDA) is Google Analytics 4's (GA4) default sales tracking attribution model. Since its inclusion in GA4 in 2020, and then its application as the default model in 2023, non-Google sources of traffic in affiliation and performance marketing have reported increasing discrepancies compared to DDA's reported sales attribution.

This document aims to clarify how these attribution discrepancies occur and guide you through alternative methods for measuring sales attribution. These complementary approaches can help you gain a more complete and accurate view of your sales performance.

It's also important to note that GA4 introduced a revised definition of user sessions, which may contribute to traffic discrepancies. For more details on this topic, please refer to our guide: Understanding Differences Between KelkooGroup Reported Clicks and Your Analytics Data.

Resolving these traffic discrepancies is a critical first step toward achieving reliable and accurate conversion attribution.

## CPA Whitepaper

In early 2024, the CPA, a profession union for digital marketers based in France, released a [white paper](https://www.cpa-france.org/project/ga4-et-laffiliation-2024/) that addressed the elephant in the room. That digital marketers' and affiliate networks' contributions to retailers bottom line was under increasing pressure due to Google's own Data-Driven Attribution model; a model which saw discrepancies balloon from a maximum of 20-30% in Google's prior default attribution model (Universal Analytics), to upwards of 80% with DDA. Digital marketers exhaled a sigh of relief reading this white paper, knowing that they were not alone, and that Google, through the implementation of their attribution technology were engaging in a degree of self-preferencing that could tilt sales attribution in their favour.

Although the white paper is in French you can find an analysis of its finding in our blog article, "[Digital marketing trade association casts doubt over Google Analytics 4's attribution model](https://www.kelkoogroup.com/resources/blog/digital-marketing-trade-association-casts-doubt-over-google-analytics-4s-attribution-model/)".

## Why DDA attributes fewer sales to non-Google sources

Google Analytics has the benefit of a complete historical view on the traffic that arrives on a retailer's site. As such it is able to implement an attribution model that looks to assign complete or partial responsibility for a sale on any source.

Non-Google sources will often be reliant on "last-click channel" attribution. In a KelkooGroup context, this means that KelkooGroup will always attribute a sale to KelkooGroup if it has been a part of the user journey.  
![GA4_1.png](https://docs.kelkoogroup.com/__attachments/a_fe99048de4d3a1046fc7b195681ca897f0c8c4ba807703bf06e4d376293fd5ba/GA4_1.png?cb=568ce057198631c18a66ff692ff9f60b)

Google Analytics, on the other hand, might have the following view.  
![GA4_2.png](https://docs.kelkoogroup.com/__attachments/a_8951170c5693feebec03a387adde814d1171b177818418bec045b175963f8e6f/GA4_2.png?cb=a682d5d859d549923c6ba0dbb536197a)

The above example shows us that at KelkooGroup we'd attribute this sale for 100 Euros to ourselves, but that GA4's DDA might actually attribute this to Facebook. The method which Google uses to determine this attribution is based on how probable a given source's inclusion in the user journey is likely to generate a sale. You can find more information on this in Google's own documentation.

This attribution model is one that is referred to as "multi-touch", and using their algorithm, Google is able to assign partial attribution to a source. For example, they may decide that in the above user journey Google is responsible for 40% of the sale, Facebook for 40% and KelkooGroup for the remaining 20%. The goal of a multi-touch attribution model is that it is designed to try and reward all sources that contribute towards a sale, regardless of when they occur in the user journey. This is very different to established models of attribution like "last-click", which favour the last source a user visited before reaching the retailer and making the sale. Last-click attribution makes the assumption that the last source a user has visited is responsible for the user making the decision to purchase and places a high value on recency.

Given how differently the above models operate, it's easy to see how discrepancies occur. But beyond the assumptions behind the DDA model, there are some design decisions that are hard to reconcile, like how DDA defines a session.

## What are scopes?

GA4 uses the concept of scopes through which to view site behaviour. Scopes are essentially different lenses through which the data can be viewed and operate within a particular hierarchy.

* **User** - the highest level which represents a visitor to your site.

  * **Session** - below a user is a session which represents a group of user interactions within a given timeframe (as explained in the previous section)

    * **Event** - a specific interaction or occurrence on your site that occurs within a session

The concept of scopes are important because while GA4 does offer different ways of viewing sales data other than via the default DDA model, you're only able to interrogate the last-click model at "User" or "Session" scopes. And remember, GA4's definition of sessions is still different to that of GA3's, so you will not be able to replicate GA3's UA exactly.

But why this approach with scopes at all you may ask? DDA registers sales at Event scope level. This approach is what allows DDA to be multi-touch, as an event can be associated to multiple sessions.

## Configuring GA4 for Fair Attribution

Go to `Admin > Data Display > Events > Attribution Settings`:

* **Attribution Model:** Review default (DDA) vs Last Click

* **Lookback Window:** Set appropriate window for sales (e.g. 30 days)

* **Channels that can receive credit:** Change to `Paid and Organic` to avoid Google bias

## Viewing Sales (Conversions) from Kelkoo Traffic

### Using Attribution Reports

Last-click may be the model that has persisted for over 20 years in e-commerce, but that doesn't necessarily make it the best way to view conversions. DDA clearly has weaknesses too and we've seen all sorts of models come and go in the intervening years. What's clear is that no attribution model offers a definitive view on your sales. Each attribution model is merely an interpretation of available data.

At KelkooGroup, we strongly recommend reviewing your sales performance via multiple attribution models and luckily GA4 allows you to compare DDA with last-click reasonably easily.

* Navigate to `Advertising > Attribution > Attribution models`

* Select key event: **purchase**

* Compare attribution models: **Data Driven vs Last Click**

* Filter by **Source = kelkoo**

![ga4_attribution_models.webp](https://docs.kelkoogroup.com/__attachments/a_25cdff64d420fadd36e284a2532a6c5b9ebcfd273dd328fde51fe5acc1c271df/ga4_attribution_models.webp?cb=cf0ba20fb59276c0c6606efabe464744)

### Digging Deeper

Seeing the details of the multi-touch model can be done quite easily, and it can help you understand how DDA is attributing sales to each of your traffic sources.

* `Advertising > Attribution > Attribution paths`: Understand how different sessions contribute to a sale

![ga4_attribution_paths.webp](https://docs.kelkoogroup.com/__attachments/a_dc905e366ea755953b7e42703f08d4d0d7c27ea2cb5d67ee9de31adc3d7f8256/ga4_attribution_paths.webp?cb=8a2ab80615fb4dab9f1137ce3f1914a7)

## Discrepancy analysis: A case study

As part of our efforts to understand how non-Google sales sources are represented in DDA, we took a month of data from a prominent merchant and compared the data GA4 was providing versus the sales data we were registering in our own systems.

We were able identify the following sources of the discrepancies:

* Sales not reported in GA4

  * Either Kelkoo Sales Tracking of GA4 can miscount

* Sales not attributed to Kelkoo due to DDA

  * Sometimes 0% attribution

  * Sometimes KelkooGroup source omitted due to GA4's definition of sessions

* DDA partially attributing sales to Kelkoo

* Kelkoo Sales Tracking not registering a sales

* Kelkoo Sales Tracking not registering a partially attributed sale

* And of course, users not consenting to cookies

![GA4_4.png](https://docs.kelkoogroup.com/__attachments/a_2056a12205db95305288be6ddd101960f04d0a188551c4bcb50a444463432096/GA4_4.png?cb=f570333f995ad35f9db01b55641852dd)

This analysis showed that GA4's DDA model only attributed 30% of total sales value to KelkooGroup. This is consistent with the findings of the CPA whitepaper which saw many platforms report discrepancies as high as 80%.

Of course, we acknowledge that the sales reported by Kelkoo's Sales Tracking technology is just one attempt to find the truth in these conversions, as is GA4's DDA. What this analysis does, is highlight the need to view sales reporting from more than one perspective, rather than relying on a single "source of truth".

## Summary

GA4 offers a powerful, but complex, set of tools to understand user journeys. Due to its evolving default attribution model (DDA), it can significantly underreport contributions from non-Google channels such as KelkooGroup. By properly configuring GA4 and using the correct reports, you can recover a much more accurate view of our traffic and performance.

If you need assistance implementing any of these practices or understanding your reports, reach out to your KelkooGroup account manager.

---
language: "en"
---
# Connect Your Analytics Tool To KelkooGroup

To take full advantage of KelkooGroup's smart pricing algorithms, we strongly encourage all our customers to implement KelkooGroup Sales Tracking (KST) on their website.

Additionally, we recommend **connecting your analytics platform to KelkooGroup access** (e.g. Google Analytics, Adobe Analytics). This enables us to proactively compare data, understand discrepancies, and align tracking methodologies. Transparency and alignment are in our **mutual interest** and key to maintaining a high-performing, efficient campaign.

## Connect Your Google Analytics 4 Account To KelkooGroup

* Log into your Google Analytics 4 account at <https://analytics.google.com/>

* Go to `Admin > Property > Property Access Management`

* Click "+" at the top right, then `Add users`

* Enter the email provided by your KelkooGroup account manager with viewer rights and click the "Add" button.

* Then navigate to `Admin > Property > Property Details`, find the property ID and send it to your KelkooGroup account manager to verify the connection.

![ga4_admin.webp](https://docs.kelkoogroup.com/__attachments/a_c9fe1f881f5945856a01406183686e8660143abc858d4ee9e5932a6262a98c7a/ga4_admin.webp?cb=5232816adb97e684dab4f88cd518b72e)
Navigate to Property Access Management  
![ga4_new_user.webp](https://docs.kelkoogroup.com/__attachments/a_64aae8113a6e37cc3241d126a18ba83e402430901bbbf3fb493fc2e4097d92f5/ga4_new_user.webp?cb=92c1d5889f22dc810b32e9623e54d679)
Add a new user

![ga4_property_id.webp](https://docs.kelkoogroup.com/__attachments/a_230728cdf6a85a0146ed69a5d3cfe2ea86d7d27ff7bed612194e5e64c17eea1a/ga4_property_id.webp?cb=2718d846bb153d189ca5df588ac33014)
Find your property ID

---
language: "en"
---
# Setup Tracking Parameters In Your Product Feed

## Tracking Kelkoo Group traffic

To measure the performance of your shopping campaign on Kelkoo Group using your analytics tool, we recommend implementing one of the following tracking methods within the product URLs of your feed:

* **UTM parameters** (for Google Analytics users). Example: `https://www.yourshop.com/myproductpage123.html?utm_source=kelkoofr&utm_medium=cpc&utm_campaign=kelkooclick&utm_source_platform=KelkooGroup`

* **Alternative URL parameters** supported by your analytics platform (for non-GA users)

* **Third-party tracking** (e.g. provided by a feed aggregator like Lengow)

## Setting Up Your Product Feed to Track Kelkoo Group Traffic in Google Analytics

**Ensure that your product feed URLs sent to Kelkoo Group include UTM parameters.**

If your feed complies with the Kelkoo Group Product Data Specification, UTM parameters must be added to the `product_url` and `mobile_url` attributes.

Google provides full guidance on how to configure UTM parameters here:

[Collect campaign data with custom URLs](https://support.google.com/analytics/answer/11242870?hl=en)

### Key UTM Parameters

Below are the key UTM parameters to include, along with recommended values:  

|     **Parameter**     |                            **Purpose**                            |                    **Examples**                    |
|-----------------------|-------------------------------------------------------------------|----------------------------------------------------|
| `utm_campaign`        | Identifies a specific product promotion or campaign               | `utm_campaign=kelkooclick` `utm_campaign=kelkoofr` |
| `utm_medium`          | Identifies the advertising medium used                            | `utm_medium=cpc`                                   |
| `utm_source`          | Identifies the source platform sending the traffic (**required**) | `utm_source=kelkoogroup` `utm_source=kelkoofr`     |
| `utm_source_platform` | Identifies the traffic platform in multi-channel reporting        | `utm_source_platform=KelkooGroup`                  |

### URL Examples

**Example 1: Your landing page URL already includes parameters**

* Original:

  `https://www.yourshop.com/showitem?sku=123`

* Updated with UTM parameters:

  `https://www.yourshop.com/showitem?sku=123&utm_source=kelkoofr&utm_medium=cpc&utm_campaign=kelkooclick&utm_source_platform=KelkooGroup`

**Example 2: Your landing page URL has no parameters**

* Original:

  `https://www.yourshop.com/product123`

* Updated with UTM parameters:

  `https://www.yourshop.com/product123?utm_source=kelkoofr&utm_medium=cpc&utm_campaign=kelkooclick&utm_source_platform=KelkooGroup`

### Default UTM Parameters Added by Kelkoo Group (If Missing)

If your product URLs do not include UTM parameters, Kelkoo Group will automatically append the following default values:  

|     **Parameter**     | **Default Value** |                                                  **Notes**                                                  |
|-----------------------|-------------------|-------------------------------------------------------------------------------------------------------------|
| `utm_campaign`        | `kelkoo[xx]`      | `[xx]` corresponds to the 2-letter country code where your campaign is active (e.g. `kelkoofr`, `kelkoode`) |
| `utm_medium`          | `cpc`             |                                                                                                             |
| `utm_source`          | `kelkooclick`     |                                                                                                             |
| `utm_source_platform` | `KelkooGroup`     |                                                                                                             |

*For best results and consistent attribution, we recommend configuring UTM parameters directly in your feed.*

---
language: "en"
---
# Understanding Differences Between KelkooGroup Reported Clicks and Your Analytics Data

When comparing KelkooGroup reports (available in the KelkooGroup Merchant Center, the Merchant Statistics API or your invoices) with the data in your own analytics platform (e.g. Google Analytics), it is common to observe differences in reported numbers. These differences arise from fundamental differences in how data is collected, defined, and counted across platforms.

## Clicks vs. Sessions: Key Conceptual Difference

The core reason for discrepancies lies in the difference between **clicks** and **sessions**:

* **Click (or Lead):** Counted every time a user clicks on one of your ads displayed on KelkooGroup's network (our own sites or publisher network).

* **Session:** Counted when a user interacts with your website. For example, in Google Analytics 4, a session starts with the first interaction of a user with your site and continues until 30 minutes of inactivity. GA4 does **not** reset the session when a new source is introduced.

Because these are two distinct metrics, they should not be expected to match exactly.

## Typical Scenarios That Explain Discrepancies

Here are common scenarios that may cause differences between the number of clicks reported by KelkooGroup and the sessions recorded in your analytics tool:

### 1. Multiple Clicks, Single Session

> **Scenario:** A user clicks two of your Kelkoo ads within 30 minutes.
>
>
> **Result:**
>
> * KelkooGroup reports: **2 clicks**
>
> * Your analytics tool reports: **1 session**

### 2. Click With No Session

> **Scenario:** A user clicks a Kelkoo ad but closes the browser or navigates away before your site fully loads.
>
>
> **Result:**
>
> * KelkooGroup reports: **1 click**
>
> * Your analytics tool reports: **0 sessions**

### 3. User Refuses Cookie Consent

> **Scenario:** A user clicks a Kelkoo ad, lands on your site, but does **not consent** to cookie usage.
>
>
> **Result:**
>
> * KelkooGroup reports: **1 click**
>
> * Your analytics tool reports: **0 sessions** (no data is tracked due to lack of consent)
>
> * This scenario is particularly common in markets with strict privacy regulations (e.g. GDPR in the EU), and can significantly affect session tracking accuracy.

### 4. User Accepts Cookie Consent But Analytics Tag Not Fired

> **Scenario:** A user clicks a Kelkoo ad, lands on your site, then consent to cookie usage but the Analytics Tag is not immediately fired to activate tracking. The user navigates and lose the tracking parameters. **Result:**
>
> * KelkooGroup reports: **1 click**
>
> * Your analytics tool reports: **0 sessions**
>
> * This scenario is particularly common in markets with strict privacy regulations (e.g. GDPR in the EU), and can significantly affect session tracking accuracy.

### 5. Adblockers and Anti-Tracking Tools

> **Scenario:** A user uses an adblocker or privacy extension.
>
>
> **Result:**
>
> * KelkooGroup's click tracking is server-based and typically unaffected.
>
> * JavaScript-based analytics tools (like Google Analytics) may fail to load or track the session.
>
> * Industry estimates suggest **up to 15%** of traffic may go untracked in GA due to these tools.

### 6. Spam Detection Differences

> **Scenario A:**
>
> * 10 clicks are registered by KelkooGroup.
>
> * Kelkoo's spam filters exclude 2 as invalid.
>
> * Your analytics tool logs all 10 sessions.
>
> * **Result:** 8 clicks, 10 sessions.

> **Scenario B:**
>
> * All 10 clicks are accepted by KelkooGroup.
>
> * Your analytics tool flags 2 sessions as spam or invalid.
>
> * **Result:** 10 clicks, 8 sessions.

## What Level of Discrepancy Is Normal?

Due to the differences outlined above, a **discrepancy of 15--25%** between Kelkoo Group click counts and your analytics session data is generally expected and considered normal.

However, larger discrepancies may indicate technical issues such as:

* **Cookie Consent:**

  * If users don't consent, GA4 cannot track them --- this can hide up to 50% of traffic.

  * Improperly configured cookie consent banners can prevent tracking

* **Incorrect or missing tracking parameters**

* **URL redirects stripping tracking parameters**

  * Server- or client-side redirects can strip UTM parameters. Use parameter-preserving redirects or propagate UTM manually.

* **Analytics tags loading too late or not firing at all**

Additionally, **Google Analytics 4's new session definition** can contribute to higher discrepancies, especially in multi-touch user journeys. See below for more details.

If you observe discrepancies exceeding 25%, we recommend reviewing your technical setup or contacting your Kelkoo account manager for personalized support.

## Understanding Differences Between KelkooGroup Reported Clicks in Google Analytics 4

### UTM parameters

UTM parameters are picked up by GA4 to identify the traffic source. Ensure that:

* `utm_source_platform` and `utm_source` are correctly passed in each Product URL of your product feed. Refer to Setup tracking parameters in your product feed.

* GA4 is properly set up to track these parameters

> **Note:** GA4 only sees these parameters if the user consents to cookies **and** the page loads with the parameters present.

### GA4 Session Definition

The way Google counts sessions with GA4 differs to GA3's Universal Analytics (UA). In GA4, a new session will only be defined if a user has been inactive for over 30 minutes. This results in significant changes as to how attribution is credited. Below is an example that shows you how sessions are delineated in GA3 versus GA4.  
![GA4_3.png](https://docs.kelkoogroup.com/__attachments/a_4f1553a9849e838b492b0c319080f2ac1cd98a976e3cdf108456da231f540523/GA4_3.png?cb=8f372671ddce6d34a9aa5ef4ec5e447f)

In the above example, a user visited your site three times: first from Google, then from Facebook, and finally, five minutes later, via KelkooGroup.

In GA3, the KelkooGroup visit would have been counted as a new session. In GA4, however, it is attributed to Facebook rather than KelkooGroup. The reasoning behind this change is unclear, but it appears to disadvantage traffic sources that may have played a more decisive role in influencing the user's purchase decision.

### Viewing Kelkoo Traffic in GA4

#### Standard but Misleading Report:

* `Reports > Acquisition > Traffic acquisition`

* Use `Session source / medium` or `Source` and filter by `kelkoo`

![ga4_traffic_acquisition.webp](https://docs.kelkoogroup.com/__attachments/a_3775e1b0b0c9ff75296a98419eabef9de8211f8ecfdec34b8894fa3fdbc4b755/ga4_traffic_acquisition.webp?cb=de68afde0f3dc1ddae1c05a79cfeb5f4)

#### Best Report:

While it is commonplace to filter reports against `utm_source=kelkoo` in order to identify traffic coming from a KelkooGroup source, this is no longer the most accurate method available to you. There have been instances where Google has replaced the `utm_source` value from "kelkoo" to "google". This has contributed even further to observed discrepancies.

An alternative method has been identified and we highly recommend trying it.

We are now actively populating the `utm_source_platform` parameter with the value "KelkooGroup". You can access the report that shows this value in the appropriate dimension by following these steps.

* Go to `Reports > Acquisition > Overview > View manual campaigns`

* Use **Session manual source platform** dimension

* Filter for value `KelkooGroup`

**Note:** You may need to build a custom or exploration report if not available by default.  
![ga4_acquisition_overview.webp](https://docs.kelkoogroup.com/__attachments/a_d0afa13c5074aa927e8263b50ea378398b1885dd1b1d1b8e764c371132122c9e/ga4_acquisition_overview.webp?cb=37f766a0195f136bf3711bdfa421826c)  
![ga4_session_manual_source_platform.webp](https://docs.kelkoogroup.com/__attachments/a_1bb2d05bb6c2d07ec566ddc4c77440a280567fdacd0aa45f35c5bc68bf827eaf/ga4_session_manual_source_platform.webp?cb=de0274eb890d30166fa43d120a2a939b)

## Maximize Accuracy and Performance with Kelkoo Sales Tracking

To to take full advantage of KelkooGroup's smart pricing algorithms, we strongly encourage all our customers to implement KelkooGroup Sales Tracking (KST) on their website.

Additionally, we recommend **granting KelkooGroup access to your analytics platform** (e.g. Google Analytics, Adobe Analytics). This enables us to proactively compare data, understand discrepancies, and align tracking methodologies. Transparency and alignment are in our **mutual interest** and key to maintaining a high-performing, efficient campaign.

---
language: "en"
---
# Kelkoo sales tracking

**Kelkoo Sales Tracking (KST)** helps Kelkoo Group measure the sales generated by your campaigns and optimise the traffic we send to your website.

By providing Kelkoo Group with accurate sales data, KST enables our optimisation algorithms to identify the traffic sources, placements and offers that deliver the best performance for your business.

## Why is Kelkoo Sales Tracking important?

Kelkoo Sales Tracking records sales completed on your website and provides Kelkoo Group with the information required to measure the performance of your campaigns.

This data allows us to understand which traffic generates the most value for your business and optimise your campaigns accordingly.

For example, KST data helps our optimisation systems determine which:

* traffic sources generate valuable sales;

* placements perform best;

* products and offers should receive more or less traffic.

Accurate and complete sales tracking is therefore essential for effective campaign optimisation.

## How does Kelkoo Sales Tracking work?

KST uses two main components:

### Lead Tag

The **Lead Tag** is loaded on your website to identify visits originating from Kelkoo Group.

When the required consent has been obtained, it stores an anonymous identifier using first-party storage. This identifier allows KST to recognise a Kelkoo visit if the user subsequently completes a purchase.

### Conversion Tag

The **Conversion Tag** fires when an order is completed and sends information about the transaction to Kelkoo Group.

This includes information such as:

* the order ID;

* the order value;

* the Kelkoo identifier, when available;

* additional transaction information, depending on your implementation.

The Conversion Tag should fire for **every completed order**. Kelkoo Group then determines whether the transaction should be attributed to Kelkoo traffic.
> **Important**
>
> KST should track every sale completed on your website, not only sales that you believe were generated by Kelkoo Group.
>
> Kelkoo Group applies its own attribution logic to determine which sales should be attributed to Kelkoo traffic. Missing or modified sales data can affect our ability to accurately measure and optimise your campaign performance.

> **Kelkoo Group and Google Analytics attribution**
>
> Kelkoo Group uses its own attribution methodology. As a result, the number of sales attributed to Kelkoo Group may differ from the figures reported by Google Analytics or other analytics platforms.
>
> See [How to use your analytics platform to track Kelkoo Group traffic](https://docs.kelkoogroup.com/for-advertisers/how-to-use-your-analytics-platform-to-track-kelkoo-group-traffic/understanding-differences-between-kelkoogroup-reported-clicks-and-your-analytics-data.md) for more information.

For a more detailed explanation, see [Understanding Kelkoo Sales Tracking](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/understanding-kelkoo-sales-tracking.md).

## Privacy and consent

Kelkoo Sales Tracking has been designed to minimise the amount of data collected and to respect applicable privacy requirements.

### Lead Tag

The Lead Tag requires the appropriate user consent before setting first-party cookies or using equivalent browser storage.

Users are identified using an anonymous identifier.

### Conversion Tag

The Conversion Tag does not require separate user consent. Kelkoo Group relies on **legitimate interest** as the legal basis for processing the sales data required to measure and optimise campaign performance.

Kelkoo Group only uses sales data relevant to the measurement and optimisation of Kelkoo Group campaigns and does not collect information that directly identifies individual customers.

For complete information about data processing, cookies and your responsibilities as an advertiser, see:

* [GDPR Notice for Kelkoo Sales Tracking](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/gdpr-notice-for-kelkoo-sales-tracking.md)

* [Kelkoo Group Privacy Policy](https://www.kelkoogroup.com/en/privacy-policy/)

* [Kelkoo Group Cookie Policy](https://www.kelkoogroup.com/en/cookie-policy/)

## How should I install Kelkoo Sales Tracking?

For the most accurate tracking, we recommend implementing both:

* [Google Tag Manager (GTM) tracking](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-via-google-tag-manager-gtm-with-enhanced-ecommerce.md)

* [Server-to-server integration](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/advanced-setup/server-to-server-integration.md)

When possible, these methods should run in parallel to maximise tracking coverage and accuracy.

Other installation methods are also available for websites using specific ecommerce platforms or custom technical setups.

See [Installation Methods](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods.md) to choose the most appropriate implementation for your website.

## Need help?

Our documentation covers the most common installation methods and [troubleshooting scenarios](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/troubleshooting.md).

If you are unable to resolve an issue after reviewing the installation and troubleshooting guides, contact the **Kelkoo Group Support team through** [**your Merchant Center**](https://merchant.kelkoogroup.com/app/contact).
> **Note**
>
> Technical support is currently provided in English only.

---
language: "en"
---
# GDPR Notice for Kelkoo Sales Tracking

Kelkoo Sales Tracking uses first-party cookies (in line with industry standards) which are set on your own domain.

In respect of Kelkoo Group traffic sourced from Google, Kelkoo Sales Tracking also calls a Google Global Site Tag to track conversions. The Google Global Site Tag uses cookies to identify unique users.

If you are using Kelkoo Sales Tracking, we suggest that you include the following information (or equivalent) in your cookie policy to notify users.

## 1st party cookie information

|    name    |    Role     | domain name | Duration  |                                      Comment                                       |
|------------|-------------|-------------|-----------|------------------------------------------------------------------------------------|
| kelkooId   | Measurement | your domain | 12 months | The kelkooid is used to mesure the performance of the Kelkoo ad campaigns          |
| kk_gclid   | Measurement | your domain | 12 months | The kk_gclid is used to mesure the performance of the Kelkoo Group ad campaigns    |
| kk_leadtag | Technical   | your domain | 12 months | The kk_leadtag is used to determine the version of the tracking tool that is used. |

More information can be found at <https://www.kelkoo.co.uk/company-pages/privacy-policy/> . Please also refer to Google´s cookie policy: <https://policies.google.com/privacy?hl=en-US> .

## Other information regarding data and processing

|                   Info                   |                                                                                 Description                                                                                  |
|------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Technology partner                       | Kelkoo Group                                                                                                                                                                 |
| Data Host                                | Kelkoo Group                                                                                                                                                                 |
| Country of data storage                  | The Netherlands                                                                                                                                                              |
| Period of data storage                   | Raw data with timestamp: * Clicks, tracking points and events: Indefinite * Impressions: 30 days * Aggregated data: Indefinite                                               |
| List of processed and stored data        | * User ID * Time of Interaction * URL of Interaction * IP address * Location data * User agent data * Sales transaction data * Transaction details (if supplied by merchant) |
| Description of processed and stored data | Transaction details stored are defined by merchant integration and can include Product Ids, basket value, product names etc                                                  |
| Goal/Objective of data storage           | Report sales conversion for Kelkoo Group traffic to optimize campaigns.                                                                                                      |
| Used technologies                        | HTML, JavaScript, Cookie                                                                                                                                                     |
| Fallback technologies                    | * Local Storage * Session Storage * Third-party cookies                                                                                                                      |
| Cookie domain                            | Merchant domain name (for first party cookies) / [Kelkoogroup.net](http://kelkoogroup.net/) (for third-party cookies)                                                        |
| Integration on which pages               | * LeadTag: all pages * ConversionTag: "Thank you page" / Confirmation page                                                                                                   |
| Integration type                         | Asynchronous JavaScript Tag                                                                                                                                                  |

Data collected as part of Kelkoo Sales Tracking is processed by Kelkoo Group on its own behalf and Kelkoo Group is responsible as the data controller for the purposes of GDPR.

This is independent of any similar data which may be collected by you on your own behalf (or through other partners you work with), in respect of which you (or your partners) remain data controllers.

There is no controller-processor relationship between Kelkoo Group and You.

If you have any questions, please do not hesitate to contact your usual contact at Kelkoo Group, or Kelkoo Group's Data Protection Officer at [dpo@kelkoogroup.com](mailto:dpo@kelkoogroup.com).

---
language: "en"
---
# Installation Methods

There are several ways to install **Kelkoo Sales Tracking (KST)**. The best method depends on your website, ecommerce platform, technical setup, and available development resources.

Use the table below to choose the installation method that best suits your setup.

## Choose your installation method

|             Method             |                            Recommended for                            |          Technical requirements          |                                                                              Installation guide                                                                              |
|--------------------------------|-----------------------------------------------------------------------|------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Google Tag Manager (GTM)**   | Websites using GTM with Enhanced Ecommerce                            | Good understanding of Google Tag Manager | [GTM Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-via-google-tag-manager-gtm-with-enhanced-ecommerce.md)                     |
| **Manual integration**         | Any website where KST can be integrated directly into the source code | Development skills required              | [Manual Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/manual-installation-for-kelkoo-sales-tracking.md)                                    |
| **Magento 1 \& 2**             | Magento stores                                                        | Development skills required              | [Magento 1 \& 2 Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/magento.md)                      |
| **PrestaShop 1.6 and earlier** | PrestaShop stores running version 1.6 or earlier                      | Development skills required              | [PrestaShop 1.6 and Older Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/prestashop-1-6x.md)    |
| **PrestaShop 1.7**             | PrestaShop stores running version 1.7                                 | Development skills required              | [PrestaShop 1.7 Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/prestashop-1-7x.md)              |
| **PrestaShop 8**               | PrestaShop stores running version 8                                   | Development skills required              | [PrestaShop 8 Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/prestashop-8.md)                   |
| **Shopify / Shopify Plus**     | Shopify and Shopify Plus stores                                       | Manual integration                       | [Shopify / Shopify Plus Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/shopify-shopify-plus.md) |
| **WooCommerce**                | WooCommerce stores                                                    | Plugin -- simple installation            | [WooCommerce Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/woocommerce.md)                     |
| **Unas Ecommerce**             | Unas stores                                                           | Plugin -- simple installation            | [Unas Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/unas-ecommerce.md)                         |
| **Lightspeed C-Series**        | Lightspeed C-Series stores                                            | Manual integration                       | [Lightspeed C-Series Installation Guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/lightspeed-c-series.md)     |
| **Server-to-server**           | Custom implementations where browser-based tracking is not suitable   | Advanced development skills required     | [Server-to-Server Integration](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/advanced-setup/server-to-server-integration.md)                                   |

> **Multi-campaign support**
>
> All installation methods support multi-campaign tracking.
> **Not sure which method to use?**
>
> If your website uses Google Tag Manager with Enhanced Ecommerce, we recommend the **GTM installation method**.
>
> If GTM is not available and there is no dedicated integration for your ecommerce platform, use the **manual installation method**.

## Test your installation

After installing Kelkoo Sales Tracking, we strongly recommend testing your implementation before considering the setup complete.

See [Test your Kelkoo Sales Tracking setup](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/test-your-kelkoo-sales-tracking-setup.md) for detailed instructions.

## Advanced setup

Once Kelkoo Sales Tracking is installed, additional configuration options are available for more advanced implementations.

These include:

* [Adding basket information](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/advanced-setup/add-basket-information.md) -- Share information about the products included in each transaction with Kelkoo Sales Tracking.

* [Reimplementing the Lead Tag logic](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/advanced-setup/lead-tag-reimplementation.md) -- Implement the Lead Tag functionality yourself when the standard implementation is not suitable.

* [Server-to-server integration](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/advanced-setup/server-to-server-integration.md) -- Implement sales tracking without relying entirely on browser-side tracking.

## Performance impact

Kelkoo Sales Tracking is designed to have minimal impact on your website's performance.

The tracking scripts and requests run asynchronously, allowing the rest of the page to load independently.

Typical timings are:

* Approximately 100 ms to download the Lead Tag (2.9 kB compressed). The download is asynchronous and does not block the page from displaying.

* Approximately 22 ms to download the Sales Tracking tag (3.9 kB compressed).

* Approximately 180 ms for the request to the Kelkoo Sales Tracking service. This request is performed in the background and does not block the user experience.

We recommend loading the script using `defer` where applicable to further minimise its impact on page loading.

---
language: "en"
---
# Advanced Setup

* [Add Basket Information](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/advanced-setup/add-basket-information.md)
* [Lead Tag Reimplementation](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/advanced-setup/lead-tag-reimplementation.md)
* [Server to server integration](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/advanced-setup/server-to-server-integration.md)

---
language: "en"
---
# Add Basket Information

You can enrich your Kelkoo Sales Tracking (KST) implementation by sending information about the products included in each transaction.

Basket information helps Kelkoo Group better understand which products generate sales and enables additional performance optimisations.

The implementation depends on how you installed Kelkoo Sales Tracking.

## Manual installation

If you installed KST manually, add a `basket` parameter to the `_kkstrack` variable on your order confirmation page.

The `basket` parameter must contain an array of all products included in the transaction:
JavaScript

    _kkstrack = {
      ...
      basket:  [{ productname: 'Man@@ubri ricoperti di spugna 1 kg x 2 pz ',
                  productid: '1',
                  quantity: '1',
                  price: '4.2'
                },
                { productname: 'p2',
                  productid: '2',
                  quantity: '3',
                  price: '8.6'
                },
                ...
                ]
      ...
    };

All four fields are required for each product:  

|     Field     |           Description            |
|---------------|----------------------------------|
| `productname` | Name of the product              |
| `productid`   | Unique identifier of the product |
| `quantity`    | Number of units purchased        |
| `price`       | Unit price of the product        |

> **Important**
>
> The `productid` should match the product identifier used in your Kelkoo Group offer feed, such as the EAN, SKU or another unique product ID.
>
> Using the same identifier allows Kelkoo Group to match transactions with the corresponding products in your feed and enables additional performance optimisations.

## Installation via Google Tag Manager (GTM)

If you installed KST through Google Tag Manager, your Data Layer must contain information about the products included in the transaction.
JavaScript

    window.dataLayer = window.dataLayer || [];
    dataLayer.push({
      'transactionId':'1234',
      'transactionAffiliation':'Acme Clothing',
      'transactionTotal':38.26,
      'transactionTax':1.29,
      'transactionShipping':5,
      'transactionProducts':[{
        'sku':'DD44',
        'name':'T-Shirt',
        'category':'Apparel',
        'price':11.99,
        'quantity':1},
        {
        'sku':'AA345',
        'name':'Boots',
        'category':'Shoes',
        'price':99.99,
        'quantity':4
      }]
    })

Make sure the product information required by your KST configuration is available in the Data Layer.
> **Important**
>
> The `sku` should match the product identifier used in your Kelkoo Group offer feed, such as the EAN, SKU or another unique product ID.
>
> Using consistent identifiers allows Kelkoo Group to match purchased products with the corresponding products in your feed and enables additional performance optimisations.

## Pass the product ID / SKU to Kelkoo Sales Tracking

* For an installation via Google Tag Manager (GTM), add SKU in the GTM tag

* For a Manual Installation, add SKU to js variable *_kkltrack* (_kkltrack.sku)

* If you already follow Google requirements regarding structured product metada (<https://developers.google.com/search/docs/data-types/product#microdata> ), Kelkoo Sales Tracking will retrieve them automatically

Ex:

    <meta itemprop="sku" content="0446310786" />

    <div property="schema:sku" content="0446310786"></div>

    <script type="application/ld+json">
        {
          ...
          "sku": "0446310786",
          ...
        }
    </script>

* Kelkoo Sales Tracking also supports Google Analytics baskets

    [
      {
        "id": "P12345",
        "name": "Android Warhol T-Shirt",
        "list_name": "Search Results",
        "brand": "Google",
        "category": "Apparel/T-Shirts",
        "variant": "Black",
        "list_position": 1,
        "quantity": 2,
        "price": '2.0'
      },
      {
        "id": "P67890",
        "name": "Flame challenge TShirt",
        "list_name": "Search Results",
        "brand": "MyBrand",
        "category": "Apparel/T-Shirts",
        "variant": "Red",
        "list_position": 2,
        "quantity": 1,
        "price": '3.0'
      }
    ]

---
language: "en"
---
# Lead Tag Reimplementation

This guide is intended for merchants who cannot use the standard Kelkoo Group `leadtag.js` script and need to reproduce its essential functionality in their own implementation.

For most integrations, we recommend using the standard **Kelkoo Lead Tag**. Only use the approach described below if you have a specific technical requirement to implement the Lead Tag logic yourself.

## Minimal implementation of lead tag

This is the minimal mechanism you need to implement
JavaScript

    KELKOO.Tracking._getUrlParamValue = function (name) {
        var bareUrlRegex = new RegExp("[\\?&]" + name + "=([\\w\\-]+)", "gi");
        var result = bareUrlRegex.exec(document.location.search);
        var activeObserveHandle = null;
        if (result) {
            activeObserveHandle = result[1];
        }
        return activeObserveHandle;
    };

    KELKOO.Tracking.setCookieAndStorage = function (name, value) {
        var d = new Date;
        d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1E3);
        document.cookie = name + "=" + value + "; expires=" + d.toGMTString() + "; path=/; domain=acme.com; SameSite=Strict";

        sessionStorage.setItem(name, value);
        localStorage.setItem(name, value);
    };

    var kk = KELKOO.Tracking._getUrlParamValue("kk");
    KELKOO.Tracking.setCookieAndStorage("kelkooId", kk);

    var gclid = KELKOO.Tracking._getUrlParamValue("gclid");
    KELKOO.Tracking.setCookieAndStorage("kk_gclid", gclid);

## The `kk` parameter and `kelkooId`

The `kk` URL parameter is automatically added by Kelkoo Group when a user clicks one of your ads.

Your Lead Tag implementation retrieves the value of `kk` and stores it as `kelkooId`

---
language: "en"
---
# Server to server integration

## Important

* Installation via Google Tag Manager (GTM) or Manual installation is the official implementation (see Installation Methods).

* This Server-to-Server implementation is only intended as a fallback method to increase tracking coverage.

* It is only available if you have an in-house development team managing. It is not suitable for agency/third party or if you don't have a technical team.

* We don't provide custom implementation and a very limited technical support for this implementation.

* You need to track inbound traffic directly from Kelkoo Group Network, as well as parallel tracking calls when the url contains gclid id from Google

* You need to make sure all sales are tracked, in-session as well as those made on a different session than the initial click.

### Global view

![KelkooSalesTrackingS2SSynchrone.png](https://docs.kelkoogroup.com/__attachments/a_b43759779cfd5cb84985ee97ea95830b546736d06d302ea5e69abc8ca1cffb24/KelkooSalesTrackingS2SSynchrone.png?cb=c79e2eb332204f470388070c8fe38cc4)

* End user browses Kelkoo Group websites, when clicking an offer on Kelkoo Group Network, he is redirected to the merchant website.

* KelkooId (*kk* ) and Google Click Id (*gclid*) is passed as parameters of the url

*ex:* [*https://www.acme.com/miror/137-miror.html?\*\*kk=a4csscc-1781b717420-34cf3\*\*\&\*\*gclid=EAIaIQobChMIpNXu6r6D6AIVQsjeCh27SQXcEAkYAyABEgIhz_D_BwE\*\*\&utm_source=kelkoofr\&utm_medium=cpc\&utm_campaign=kelkooclick*](https://www.acme.com/miror/137-miror.html?**kk=a4csscc-1781b717420-34cf3**&**gclid=EAIaIQobChMIpNXu6r6D6AIVQsjeCh27SQXcEAkYAyABEgIhz_D_BwE**&utm_source=kelkoofr&utm_medium=cpc&utm_campaign=kelkooclick)

* When the user reaches one of your Product page, your website stores *kk* and *gclid* id in a table on your website's backend, and associate it to the current user via the login/basket

|      basket      |  login  |            kk             |                          gclid                          |
|------------------|---------|---------------------------|---------------------------------------------------------|
| 17e8b1bxx7r17420 | 1233443 | a4csscc-1781b717420-34cf3 | EAIaIQobChMIpNXu6r6D6AIVQsjeCh27SQXcEAkYAyABEgIhz_D_BwE |
| ...              | ...     | ...                       | ...                                                     |

* When the user buys the product and reaches your Confirmation Page, your Website retrieves *kk* and *gclid* params value from database and calls the *Kelkoo Group Sales Tracking Webservice* on <https://s.kelkoogroup.net/st> for each sale with an HTTP GET with the following parameters:

|     name      |  type   | mandatory |                                         description                                          |                                                                                      example                                                                                       |
|---------------|---------|-----------|----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| country       | String  | true      | The 2-letter country code for the country on which your products are listed on Kelkoo Group: | fr                                                                                                                                                                                 |
| orderId       | String  | true      | A unique order identifier                                                                    | FAPC-MZL8-QFNY                                                                                                                                                                     |
| comId         | Long    | true      | The unique ID representing your shop within the Kelkoo Group system                          | 100503562                                                                                                                                                                          |
| orderValue    | Double  | true      | The total amount of the order                                                                | 37.72                                                                                                                                                                              |
| productsInfos | String  | true      | A UrlEncoded Base64 of a Json Array of the products in the basket.                           | W3sicHJvZHVjdG5hbWUiOiJTaGltYW5vIiwiaWQiOiJwcm9kMTMwODIzIiwicHJpY2UiOjE0Ljk5LCJxdWFudGl0eSI6Mn1d `[{"productname":"Shimano","productid":"prod130823","price":14.99,"quantity":2}]` |
| saleId        | Double  | true      | A randomly generated number between 0 and 1                                                  | 0.24603935101497432                                                                                                                                                                |
| kelkooId      | String  | false     | The value of the kk parameter in the url of your landing page                                | a4c6224-1700767fb9f-c3de3                                                                                                                                                          |
| gclid         | String  | false     | The value of the gclid parameter in the url of your landing page                             | EAIaIQobChMIpNXu6r6D6AIVQsjeCh27SQXcEAkYAyABEgIhz_D_BwE                                                                                                                            |
| msclkid       | String  | false     | The value of the msclkid parameter in the url of your landing page                           | 751ff8c7d3bf17f6f6729c640c4249d5                                                                                                                                                   |
| returningUser | Boolean | false     | "true" if the sale is done by a returning user, "false" for a new user                       | true                                                                                                                                                                               |
| source        | String  | false     | Set this param value to "serverToServer"                                                     | serverToServer                                                                                                                                                                     |

Here is an example of decoded and pretty-printed `productsInfos`:

    [
      {
        "productname": "Shimano", // string
        "productid": "prod130823", // string
        "price": 14.99, // double
        "quantity": 2 // integer, floating number is not allowed here
      }
    ]

### GDPR considerations

Consent needs to be managed directly by merchants as this is not part of the traditional cookie consent mechanism. See GDPR Notice for Kelkoo Sales Tracking.

## What exactly do you need to implement ?

*Workload: estimated to 5 days minimum of development for an experimented developer*

* Add parameters into the merchant landing page urls if you use an external tracking service (such as Lengow). For example, Lengow short urls are not compatible.

* Store kelkooId / Google Click Id in database whenever a page is visited and associate it with the current user with login and basket

* In order to add the domain, for best practice, add in the request header of the call : "Referer: [https://yourwebsite.com](https://yourwebsite.com/)"

* Retrieve the KelkooId and Google Click Id from the database when Confirmation Page is displayed, and call the Kelkoo Sales Tracking Webservice

*example of a call:* [*https://s.kelkoogroup.net/st?country=fr\&orderId=CMD0572084\&comId=100475501\&orderValue=609.07\&productsInfos=W3sicHJvZHVjdG5hbWUiOiJCb2l0ZSBkZSAxMDAwIGxhbWVsbGVzIGVuIGJvaXMgTGFtZWxsbyBlbiAyMCIsInByb2R1Y3RpZCI6IlAxNDA0OTAiLCJwcmljZSI6MzAuNTAsInF1YW50aXR5IjoxfSx7InByb2R1Y3RuYW1lIjoiQm9pdGUgZGUgMTAwMCBsYW1lbGxlcyBlbiBib2lzIExhbWVsbG8gZW4gMTAiLCJwcm9kdWN0aWQiOiJQMTQwNDkxIiwicHJpY2UiOjI5LjI1LCJxdWFudGl0eSI6MX0seyJwcm9kdWN0bmFtZSI6IkNvbGxlIHZpbnlsaXF1ZSBSIDY0IHByaXNlIGxlbnRlIHNww6ljaWFsZSBtZW51aXNlcmllIGVuIGJpYmVyb24gZGUgMC43NSBrZ3MiLCJwcm9kdWN0aWQiOiJQMTM3NzI4IiwicHJpY2UiOjEwLjkxLCJxdWFudGl0eSI6MX0seyJwcm9kdWN0bmFtZSI6IlNlcnJlIGpvaW50cyDDqWNhcnRldXIgUXVpY2sgR3JpcCAzMDAgbW0iLCJwcm9kdWN0aWQiOiJQMTA4NTMwIiwicHJpY2UiOjE4LjcwLCJxdWFudGl0eSI6Mn0seyJwcm9kdWN0bmFtZSI6IlNlcnJlIGpvaW50IMOgIHBvbXBlIE9icmEgc2FpbGxpZSAxMjAgbW0gc2VycmFnZSBtYXhpIDEwMDAgbW0iLCJwcm9kdWN0aWQiOiJQMjMwODE0IiwicHJpY2UiOjI1LjI2LCJxdWFudGl0eSI6Mn1d\&saleId=0.193286593627784\&kelkooId=66b5837-16afefa0c40-1b540\&source=serverToServer*](https://s.kelkoogroup.net/st?country=fr&orderId=CMD0572084&comId=100475501&orderValue=609.07&productsInfos=W3sicHJvZHVjdG5hbWUiOiJCb2l0ZSBkZSAxMDAwIGxhbWVsbGVzIGVuIGJvaXMgTGFtZWxsbyBlbiAyMCIsInByb2R1Y3RpZCI6IlAxNDA0OTAiLCJwcmljZSI6MzAuNTAsInF1YW50aXR5IjoxfSx7InByb2R1Y3RuYW1lIjoiQm9pdGUgZGUgMTAwMCBsYW1lbGxlcyBlbiBib2lzIExhbWVsbG8gZW4gMTAiLCJwcm9kdWN0aWQiOiJQMTQwNDkxIiwicHJpY2UiOjI5LjI1LCJxdWFudGl0eSI6MX0seyJwcm9kdWN0bmFtZSI6IkNvbGxlIHZpbnlsaXF1ZSBSIDY0IHByaXNlIGxlbnRlIHNww6ljaWFsZSBtZW51aXNlcmllIGVuIGJpYmVyb24gZGUgMC43NSBrZ3MiLCJwcm9kdWN0aWQiOiJQMTM3NzI4IiwicHJpY2UiOjEwLjkxLCJxdWFudGl0eSI6MX0seyJwcm9kdWN0bmFtZSI6IlNlcnJlIGpvaW50cyDDqWNhcnRldXIgUXVpY2sgR3JpcCAzMDAgbW0iLCJwcm9kdWN0aWQiOiJQMTA4NTMwIiwicHJpY2UiOjE4LjcwLCJxdWFudGl0eSI6Mn0seyJwcm9kdWN0bmFtZSI6IlNlcnJlIGpvaW50IMOgIHBvbXBlIE9icmEgc2FpbGxpZSAxMjAgbW0gc2VycmFnZSBtYXhpIDEwMDAgbW0iLCJwcm9kdWN0aWQiOiJQMjMwODE0IiwicHJpY2UiOjI1LjI2LCJxdWFudGl0eSI6Mn1d&saleId=0.193286593627784&kelkooId=66b5837-16afefa0c40-1b540&source=serverToServer)

* Implement Consent management. See GDPR Notice for Kelkoo Sales Tracking.

### Enhanced Code Implementation:

#### Languages

1. [PHP](https://developers.kelkoogroup.com/#php-version-550-or-higher)

2. [Java](https://developers.kelkoogroup.com/#java-version-8)

3. [Python](https://developers.kelkoogroup.com/#java-version-8)

4. [Node.js](https://developers.kelkoogroup.com/#nodejs-version-20x)

#### PHP (Version 5.5.0 or higher)

* The following example shows you how to store tracking click ID (kelkooId / Google Click Id / Microsoft Click ID) in the database whenever a page is visited and associate it with the current user upon login and during basket interactions.

    <?php
    // Function to store kelkooId / Google Click Id / Microsoft click ID in the database
    function storeIdsInDatabase($userId, $kelkooId, $googleClickId, $msclkid) {
        global $db; // Assuming $db is your database connection

        // Escape inputs to prevent SQL injection
        $kelkooId = mysqli_real_escape_string($db, $kelkooId);
        $googleClickId = mysqli_real_escape_string($db, $googleClickId);
        $msclkid = mysqli_real_escape_string($db, $msclkid);
        $userId = mysqli_real_escape_string($db, $userId);

        // Check if either kelkooId, googleClickId or $msclkid is not null
        if ($kelkooId !== null || $googleClickId !== null || $msclkid !== null) {
            // Insert query to store data in the database
            $query = "REPLACE INTO user_tracking (user_id, kelkoo_id, google_click_id, ms_clk_id) VALUES ('$userId','$kelkooId', '$googleClickId', '$msclkid')";
        
            // Execute query
            mysqli_query($db, $query);
        }
    }

    // Function to extract parameters from URL
    function extractParamsFromUrl($url) {
        $query = parse_url($url, PHP_URL_QUERY);
        parse_str($query, $params);
        return $params;
    }

    // Assuming you retrieve the current URL
    $currentUrl = $_SERVER['REQUEST_URI'];

    // Extract parameters from URL
    $params = extractParamsFromUrl($currentUrl);

    // Extract kelkooId, googleClickId and msclkid from parameters
    $kelkooId = isset($params['kk']) ? $params['kk'] : null;
    $googleClickId = isset($params['gclid']) ? $params['gclid'] : null;
    $msclkid = isset($params['msclkid']) ? $params['msclkid'] : null;

    // Assuming you also retrieve the user ID from your session or other means
    $userId = $_SESSION['user_id'];

    // Call the function to store IDs in the database if either kelkooId or googleClickId is not null
    if ($kelkooId !== null || $googleClickId !== null || msclkid !== null) {
        storeIdsInDatabase($userId, $kelkooId, $googleClickId, $msclkid);
    }
    ?>

* The following example illustrates how to retrieve the Tracking click ID (KelkooId, Google Click ID, or Microsoft Click ID) from the database when the Confirmation Page is displayed, and then call the Kelkoo Sales Tracking Webservice with your domain specified in the request header.

    <?php
    // Assuming you have already connected to your database

    // Function to retrieve KelkooId, Google Click Id and Microsoft Click ID from the database
    function getIdsFromDatabase($userId) {
        global $db; // Assuming $db is your database connection

        // Sanitize input to prevent SQL injection
        $userId = mysqli_real_escape_string($db, $userId);

        // Select query to retrieve data from the database
        $query = "SELECT kelkoo_id, google_click_id, ms_clk_id FROM user_tracking WHERE user_id = '$userId'";

        // Execute query
        $result = mysqli_query($db, $query);

        // Fetch data
        $row = mysqli_fetch_assoc($result);

        // Return KelkooId, Google Click Id and Microsoft Click ID
        return $row;
    }

    // Function for custom base64 encoding without padding
    function customBase64Encode($data) {
        return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
    }

    // Function to encode basket items
    function encodeBasket($productsArray) {
        // Convert the PHP array to JSON
        $jsonData = json_encode($productsArray);

        // Encode the JSON in base64 without padding
        $base64Data = customBase64Encode($jsonData);

        // URL encode the result
        $urlEncodedData = urlencode($base64Data);

        return $urlEncodedData;
    }

    // Function to generate randomly number between 0 and 1
    function generateSaleId() {
        return mt_rand() / mt_getrandmax();
    }

    // Function to call Kelkoo Sales Tracking Webservice
    function callKelkooSalesTracking($country, $comId, $orderId, $orderValue, $productsInfos, $saleId, $kelkooId, $gclid, $msclkid) {
        // URL of the Kelkoo Sales Tracking Webservice
        $url = 'https://s.kelkoogroup.net/st';

        // Data to be sent in the request
        $data = array(
            'country' => $country,
            'orderId' => $orderId,
            'comId' => $comId,
            'orderValue' => $orderValue,
            'productsInfos' => $productsInfos,
            'saleId' => $saleId,
            'kelkooId' => $kelkooId,
            'gclid' => $gclid,
            'msclkid' => $msclkid
        );

        // Append data to URL
        $url .= '?' . http_build_query($data);

        // Initialize cURL session
        $curl = curl_init();

        // Set the URL
        curl_setopt($curl, CURLOPT_URL, $url);

        // Set request header
        curl_setopt($curl, CURLOPT_HTTPHEADER, array(
            'Referer: https://yourwebsite.com'
        ));

        // Set request method to GET
        curl_setopt($curl, CURLOPT_HTTPGET, true);

        // Execute the request
        $response = curl_exec($curl);

        // Close cURL session
        curl_close($curl);

        // Process response as needed
    }

    // Assuming you have retrieved the user ID from the session or other means
    $userId = $_SESSION['user_id'];

    // Your Kelkoo group information - Static values
    $country = 'fr';
    $comId = 100475501;

    // Order information - dynamic values to retrieve from the order information
    $orderId='CMD0572084';
    $orderValue=609.07;
    $basket = array(
            array(
                'productname' => 'Shimano',
                'productid' => 'prod130823',
                'price' => 14.99,
                'quantity' => 2
            )
        );

    // Retrieve KelkooId, Google Click Id, Microsoft click ID from the database
    $ids = getIdsFromDatabase($userId);
    if ($ids['kelkoo_id'] || $ids['google_click_id'] || $ids['ms_clk_id']) {
        // Call Kelkoo Sales Tracking Webservice
        callKelkooSalesTracking($country, $comId, $orderId, $orderValue, encodeBasket($basket), generateSaleId(), $ids['kelkoo_id'], $ids['google_click_id'], $ids['ms_clk_id']);
    }
    ?>

#### Java (Version 8)

* The following example shows you how to store tracking click ID (kelkooId / Google Click Id / Microsoft Click ID) in the database whenever a page is visited and associate it with the current user upon login and during basket interactions.

    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;

    @WebFilter("/*")
    public class TrackingFilter implements Filter {

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            // Initialization code if needed
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            String kelkooId = httpRequest.getParameter("kk");
            String googleClickId = httpRequest.getParameter("gclid");
            String msclkid = httpRequest.getParameter("msclkid");
            HttpSession session = httpRequest.getSession();
            String userId = (String) session.getAttribute("user_id");

            if (kelkooId != null || googleClickId != null || msclkid != null) {
                storeIdsInDatabase(userId, kelkooId, googleClickId, msclkid);
            }

            chain.doFilter(request, response);
        }

        @Override
        public void destroy() {
            // Cleanup code if needed
        }

        // Function to store kelkooId / Google Click Id / Microsoft Click ID in the database
        private void storeIdsInDatabase(String userId, String kelkooId, String googleClickId, String msclkid) {
            // Database connection parameters
            String url = "jdbc:mysql://localhost:3306/your_database";
            String user = "username";
            String password = "password";

            try (Connection connection = DriverManager.getConnection(url, user, password)) {
                String query = "INSERT INTO user_tracking (user_id, kelkoo_id, google_click_id, ms_clk_id) VALUES (?, ?, ?, ?)";
                try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
                    preparedStatement.setString(1, userId);
                    preparedStatement.setString(2, kelkooId);
                    preparedStatement.setString(3, googleClickId);
                    preparedStatement.setString(4, msclkid);
                    preparedStatement.executeUpdate();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

* The following example illustrates how to retrieve the Tracking click ID (KelkooId, Google Click ID, or Microsoft Click ID) from the database when the Confirmation Page is displayed, and then call the Kelkoo Sales Tracking Webservice with your domain specified in the request header.

    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.nio.charset.StandardCharsets;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Map;

    import com.google.gson.Gson;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;

    @WebServlet("/confirmation")
    public class ConfirmationPageServlet extends HttpServlet {

        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // Retrieve user ID from session or other means
            String userId = "user123"; // Replace with actual user ID

            // Your Kelkoo group information - Static values
            String country = "fr";
            int comId = 100475501;

            // Order information - dynamic values to retrieve from the order information
            String orderId = "CMD0572084";
            double orderValue = 609.07;
            Map<String, Object> basket = new HashMap<>();
            basket.put("productname", "Shimano");
            basket.put("productid", "prod130823");
            basket.put("price", 14.99);
            basket.put("quantity", 2);

            // Retrieve KelkooId, Google Click Id, Microsoft click ID from the database
            String[] ids = getIdsFromDatabase(userId);
            String kelkooId = ids[0];
            String googleClickId = ids[1];
            String msclkid = ids[2];

            if (kelkooId != null || googleClickId != null || msclkid != null) {
                // Call Kelkoo Sales Tracking Webservice
                callKelkooSalesTracking(country, comId, orderId, orderValue, basket, kelkooId, googleClickId, msclkid);
            }

            response.getWriter().println("Confirmation Page Displayed");
        }

        // Function to retrieve KelkooId, Google Click Id and Microsoft Click ID from the database
        private String[] getIdsFromDatabase(String userId) {
            String[] ids = new String[3]; // Array to store kelkooId, googleClickId, msclkid
            // Database connection parameters
            String url = "jdbc:mysql://localhost:3306/your_database";
            String user = "username";
            String password = "password";

            try (Connection connection = DriverManager.getConnection(url, user, password)) {
                // Replace query to retrieve data from the database
                String query = "SELECT kelkoo_id, google_click_id, ms_clk_id FROM user_tracking WHERE user_id = ?";
                try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
                    preparedStatement.setString(1, userId);
                    try (ResultSet resultSet = preparedStatement.executeQuery()) {
                        if (resultSet.next()) {
                            ids[0] = resultSet.getString("kelkoo_id");
                            ids[1] = resultSet.getString("google_click_id");
                            ids[2] = resultSet.getString("ms_clk_id");
                        }
                    }
                }
            } catch (SQLException e) {
                // Exception management
            }
            return ids;
        }

        // Function to call Kelkoo Sales Tracking Webservice
        private void callKelkooSalesTracking(String country, int comId, String orderId, double orderValue, Map<String, Object> basket,
                                              String kelkooId, String googleClickId, String msclkid) throws IOException {
            // URL of the Kelkoo Sales Tracking Webservice
            String urlString = "https://s.kelkoogroup.net/st";

            // Data to be sent in the request
            Map<String, Object> data = new HashMap<>();
            data.put("country", country);
            data.put("orderId", orderId);
            data.put("comId", comId);
            data.put("orderValue", orderValue);
            data.put("productsInfos", basket);
            data.put("saleId", generateSaleId());
            data.put("kelkooId", kelkooId);
            data.put("gclid", googleClickId);
            data.put("msclkid", msclkid);

            // Convert data to JSON
            Gson gson = new Gson();
            String jsonData = gson.toJson(data);

            // Create connection
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Referer", "https://yourwebsite.com");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoOutput(true);

            // Write data to the connection
            try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8)) {
                writer.write(jsonData);
                writer.flush();
            }

            // Get response
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // Process response as needed
                System.out.println("Kelkoo Sales Tracking Webservice called successfully.");
            } else {
                System.out.println("Failed to call Kelkoo Sales Tracking Webservice. Response code: " + responseCode);
            }

            // Close connection
            connection.disconnect();
        }

        // Function to generate randomly number between 0 and 1
        private double generateSaleId() {
            return Math.random();
        }
    }

#### Python (Version 3.x)

* The following example shows you how to store tracking click ID (kelkooId / Google Click Id / Microsoft Click ID) in the database whenever a page is visited and associate it with the current user upon login and during basket interactions.

    import urllib.parse
    import http.server
    import socketserver
    import mysql.connector

    # Function to store kelkooId / Google Click Id / Microsoft click ID in the database
    def store_ids_in_database(user_id, kelkoo_id, google_click_id, msclkid):
        # Connect to the database
        connection = mysql.connector.connect(
            host='localhost',
            user='username',
            password='password',
            database='your_database'
        )

        try:
            cursor = connection.cursor()

            # Replace query to store data in the database
            sql = "REPLACE INTO user_tracking (user_id, kelkoo_id, google_click_id, ms_clk_id) VALUES (%s, %s, %s, %s)"
            cursor.execute(sql, (user_id, kelkoo_id, google_click_id, msclkid))

            # Commit changes
            connection.commit()

        finally:
            cursor.close()
            connection.close()

    # Function to extract parameters from URL
    def extract_params_from_url(url):
        query = urllib.parse.urlparse(url).query
        params = urllib.parse.parse_qs(query)
        return params

    class RequestHandler(http.server.SimpleHTTPRequestHandler):
        def do_GET(self):
            # Extract parameters from URL
            params = extract_params_from_url(self.path)

            # Extract kelkooId, googleClickId and msclkid from parameters
            kelkoo_id = params.get('kk', [None])[0]
            google_click_id = params.get('gclid', [None])[0]
            msclkid = params.get('msclkid', [None])[0]

            # Assuming you also retrieve the user ID from your session or other means
            user_id = "user123"

            # Call the function to store IDs in the database if either kelkooId or googleClickId is not None
            if kelkoo_id is not None or google_click_id is not None or msclkid is not None:
                store_ids_in_database(user_id, kelkoo_id, google_click_id, msclkid)

            # Send response
            self.send_response(200)
            self.end_headers()
            self.wfile.write(b'Data stored successfully!')

    # Assuming your server runs on port 8000
    with socketserver.TCPServer(("", 8000), RequestHandler) as httpd:
        print("Server started on port 8000...")
        httpd.serve_forever()

* The following example illustrates how to retrieve the Tracking click ID (KelkooId, Google Click ID, or Microsoft Click ID) from the database when the Confirmation Page is displayed, and then call the Kelkoo Sales Tracking Webservice with your domain specified in the request header.

    import json
    import random
    import urllib.parse
    import urllib.request
    import mysql.connector

    # Function to retrieve KelkooId, Google Click Id and Microsoft Click ID from the database
    def get_ids_from_database(user_id):
        # Connect to the database
        connection = mysql.connector.connect(
            host='your_host',
            user='your_user',
            password='your_password',
            database='your_database'
        )

        # Create a cursor object
        cursor = connection.cursor()

        try:
            # Sanitize input to prevent SQL injection
            user_id = cursor.escape_string(user_id)

            # Select query to retrieve data from the database
            query = "SELECT kelkoo_id, google_click_id, ms_clk_id FROM user_tracking WHERE user_id = '%s'" % user_id

            # Execute query
            cursor.execute(query)

            # Fetch data
            row = cursor.fetchone()

            # Return KelkooId, Google Click Id and Microsoft Click ID
            return row

        finally:
            # Close cursor and connection
            cursor.close()
            connection.close()

    # Function for custom base64 encoding without padding
    def custom_base64_encode(data):
        return urllib.parse.quote_plus(data)

    # Function to encode basket items
    def encode_basket(products_array):
        # Convert the Python array to JSON
        json_data = json.dumps(products_array)

        # Encode the JSON in base64 without padding
        base64_data = custom_base64_encode(json_data)

        return base64_data

    # Function to generate randomly number between 0 and 1
    def generate_sale_id():
        return random.random()

    # Function to call Kelkoo Sales Tracking Webservice
    def call_kelkoo_sales_tracking(country, com_id, order_id, order_value, products_infos, sale_id, kelkoo_id, gclid, msclkid):
        # URL of the Kelkoo Sales Tracking Webservice
        url = 'https://s.kelkoogroup.net/st'

        # Data to be sent in the request
        data = {
            'country': country,
            'orderId': order_id,
            'comId': com_id,
            'orderValue': order_value,
            'productsInfos': products_infos,
            'saleId': sale_id,
            'kelkooId': kelkoo_id,
            'gclid': gclid,
            'msclkid': msclkid
        }

        # Append data to URL
        url += '?' + urllib.parse.urlencode(data)

        # Set request header
        headers = {'Referer': 'https://yourwebsite.com'}

        # Create request object
        req = urllib.request.Request(url, headers=headers)

        # Execute the request
        with urllib.request.urlopen(req) as response:
            response_data = response.read()
            # Process response as needed
            print(response_data)

    # Assuming you have retrieved the user ID from the session or other means
    user_id = 'user123'  # Replace with actual user ID

    # Your Kelkoo group information - Static values
    country = 'fr'
    com_id = 100475501

    # Order information - dynamic values to retrieve from the order information
    order_id = 'CMD0572084'
    order_value = 609.07
    basket = [
        {
            'productname': 'Shimano',
            'productid': 'prod130823',
            'price': 14.99,
            'quantity': 2
        }
    ]

    # Retrieve KelkooId, Google Click Id, Microsoft click ID from the database
    kelkoo_id, google_click_id, msclkid = get_ids_from_database(user_id)
    if kelkoo_id or google_click_id or msclkid:
        # Call Kelkoo Sales Tracking Webservice
        call_kelkoo_sales_tracking(country, com_id, order_id, order_value, encode_basket(basket), generate_sale_id(), kelkoo_id, google_click_id, msclkid)

#### Node.js (version 20.x)

* The following example shows you how to store tracking click ID (kelkooId / Google Click Id / Microsoft Click ID) in the database whenever a page is visited and associate it with the current user upon login and during basket interactions.

    const mysql = require('mysql');

    // Create a connection to MySQL database
    const db = mysql.createConnection({
      host: 'localhost',
      user: 'username',
      password: 'password',
      database: 'database_name'
    });

    // Connect to the database
    db.connect((err) => {
      if (err) {
        throw err;
      }
      console.log('Connected to MySQL database');
    });

    // Function to store kelkooId / Google Click Id / Microsoft Click ID in the database
    function storeIdsInDatabase(userId, kelkooId, googleClickId, msclkid) {
      // Escape inputs to prevent SQL injection
      kelkooId = db.escape(kelkooId);
      googleClickId = db.escape(googleClickId);
      msclkid = db.escape(msclkid);
      userId = db.escape(userId);

      // Check if kelkooId, googleClickId, or msclkid is not null
      if (kelkooId !== null || googleClickId !== null || msclkid !== null) {
        // Insert query to store data in the database
        const query = `REPLACE INTO user_tracking (user_id, kelkoo_id, google_click_id, ms_clk_id) VALUES (${userId}, ${kelkooId}, ${googleClickId}, ${msclkid})`;
        
        // Execute query
        db.query(query, (err, result) => {
          if (err) {
            throw err;
          }
          console.log('Data inserted into database');
        });
      }
    }

    // Function to extract parameters from URL
    function extractParamsFromUrl(url) {
      const queryString = require('query-string');
      const parsed = queryString.parseUrl(url);
      return parsed.query;
    }

    // Assuming you retrieve the current URL
    const currentUrl = req.url;

    // Extract parameters from URL
    const params = extractParamsFromUrl(currentUrl);

    // Extract kelkooId, googleClickId, and msclkid from parameters
    const kelkooId = params.kk || null;
    const googleClickId = params.gclid || null;
    const msclkid = params.msclkid || null;

    // Assuming you also retrieve the user ID from your session or other means
    const userId = req.session.user_id;

    // Call the function to store IDs in the database if kelkooId, googleClickId, or msclkid is not null
    if (kelkooId !== null || googleClickId !== null || msclkid !== null) {
      storeIdsInDatabase(userId, kelkooId, googleClickId, msclkid);
    }

* The following example illustrates how to retrieve the Tracking click ID (KelkooId, Google Click ID, or Microsoft Click ID) from the database when the Confirmation Page is displayed, and then call the Kelkoo Sales Tracking Webservice with your domain specified in the request header.

    const https = require('https');
    const querystring = require('querystring');

    // Function to retrieve KelkooId, Google Click Id, and Microsoft Click ID from the database
    function getIdsFromDatabase(userId) {
        // Assuming db is your database connection
        return new Promise((resolve, reject) => {
            const query = `SELECT kelkoo_id, google_click_id, ms_clk_id FROM user_tracking WHERE user_id = '${userId}'`;
            db.query(query, (err, result) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(result[0]);
                }
            });
        });
    }

    // Function to custom base64 encode without padding
    function customBase64Encode(data) {
        return Buffer.from(data).toString('base64').replace(/=+$/, '');
    }

    // Function to encode basket items
    function encodeBasket(productsArray) {
        const jsonData = JSON.stringify(productsArray);
        const base64Data = customBase64Encode(jsonData);
        return encodeURIComponent(base64Data);
    }

    // Function to generate a random sale ID
    function generateSaleId() {
        return Math.random();
    }

    // Function to call Kelkoo Sales Tracking Webservice
    function callKelkooSalesTracking(country, comId, orderId, orderValue, productsInfos, saleId, kelkooId, gclid, msclkid) {
        const data = {
            country,
            orderId,
            comId,
            orderValue,
            productsInfos,
            saleId,
            kelkooId,
            gclid,
            msclkid
        };

        const url = `https://s.kelkoogroup.net/st?${querystring.stringify(data)}`;

        const options = {
            method: 'GET',
            headers: {
                'Referer': 'https://yourwebsite.com'
            }
        };

        https.get(url, options, (res) => {
            console.log('Response status code:', res.statusCode);
        }).on('error', (err) => {
            console.error('Error:', err.message);
        });
    }

    // Assuming you have retrieved the user ID from the session or other means
    const userId = req.session.user_id;

    // Your Kelkoo group information - Static values
    const country = 'fr';
    const comId = 100475501;

    // Order information - dynamic values to retrieve from the order information
    const orderId = 'CMD0572084';
    const orderValue = 609.07;
    const basket = [{
        productname: 'Shimano',
        productid: 'prod130823',
        price: 14.99,
        quantity: 2
    }];

    // Retrieve KelkooId, Google Click Id, Microsoft Click ID from the database
    getIdsFromDatabase(userId)
        .then(ids => {
            if (ids.kelkoo_id || ids.google_click_id || ids.ms_clk_id) {
                // Call Kelkoo Sales Tracking Webservice
                callKelkooSalesTracking(country, comId, orderId, orderValue, encodeBasket(basket), generateSaleId(), ids.kelkoo_id, ids.google_click_id, ids.ms_clk_id);
            }
        })
        .catch(err => {
            console.error('Error:', err);
        });

---
language: "en"
---
# How To get your merchantId and associated Country Code

* Connect to *Kelkoo Group Merchant Extranet*

* Click on the dropdown at the top left

![MerchantExtranetx.png](https://docs.kelkoogroup.com/__attachments/a_05129a05a5039d1dffda46885172cb451ad10ca36b952a4448032f8b60483e82/MerchantExtranetx.png?cb=358a95eaf7ca646eda1d2cd07e7931a5)

* Here you can see your Merchant Id and associated country code (in bracket)

In the example above you have the following  

| merchantId | country |
|------------|---------|
| 100523248  | fr      |
| 100507945  | de      |

Here is the list of countries code we use at Kelkoo  

| Code |       Country        |
|------|----------------------|
| ae   | United Arab Emirates |
| au   | Australia            |
| at   | Austria              |
| be   | Belgium              |
| br   | Brazil               |
| ca   | Canada               |
| ch   | Switzerland          |
| cz   | Czech Republic       |
| de   | Germany              |
| dk   | Denmark              |
| gr   | Greece               |
| es   | Spain                |
| fi   | Finland              |
| fr   | France               |
| hk   | Hong Kong            |
| ie   | Ireland              |
| it   | Italy                |
| in   | India                |
| id   | Indonesia            |
| jp   | Japan                |
| kr   | South Korea          |
| my   | Malaysia             |
| mx   | Mexico               |
| nb   | Flemish Belgium      |
| nl   | Netherlands          |
| no   | Norway               |
| nz   | New Zealand          |
| ph   | The Philippines      |
| pl   | Poland               |
| pt   | Portugal             |
| ru   | Russia               |
| se   | Sweden               |
| sg   | Singapore            |
| tr   | Turkey               |
| uk   | United Kingdom       |
| us   | United States        |
| vn   | Vietnam              |
| za   | South Africa         |

---
language: "en"
---
# Installation Guides for eCommerce platforms

* [Magento](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/magento.md)
* [Shopify/Shopify Plus](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/shopify-shopify-plus.md)
* [WooCommerce](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/woocommerce.md)
* [Unas Ecommerce](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/unas-ecommerce.md)
* [Prestashop 1.6x](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/prestashop-1-6x.md)
* [Prestashop 1.7x](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/prestashop-1-7x.md)
* [Prestashop 8](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/prestashop-8.md)
* [LightSpeed (C-Series)](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/lightspeed-c-series.md)

---
language: "en"
---
# LightSpeed (C-Series)

This is the documentation to install Kelkoo Sales tracking for Lightspeed C-series.

## Before setting up your Kelkoo Sales Tracking Tag

### Get your merchantId and associated Country Code

See How To get your merchantId and associated Country Code.

## Installing Kelkoo Sales Tracking

1. Login to your Lightspeed Account.

2. On the left side menu, click on 'Web Extras'.

![image-20260129-161250.png](https://docs.kelkoogroup.com/__attachments/a_a6c7a0cafd6c6b08dbbcc28168ea7eee5491cfdd86a1128860f886aea7e0e766/image-20260129-161250.png?cb=ef5fa025f9a1d02258a857bc2f1dce64)

**Lead Tag**

3. Click on Custom JavaScript and add the **Lead Tag**in the text area.

       <script async="true" type="text/javascript" src="https://s.kk-resources.com/leadtag.js" ></script>

![image-20260129-161935.png](https://docs.kelkoogroup.com/__attachments/a_95829751d3dba8e25b0b98c83bc3607a707fee3cf2888019fef23ee55239ffe9/image-20260129-161935.png?cb=9d28c54c0061a8bd2cb5874903721677)

**Conversion Tag**

4. Copy the code below and replace the COUNTRY_CODE and MERCHANT_ID with the one associated to your campaign in the **Conversion Tag.**

       <script type="text/javascript">
           _kkstrack = {
             merchantInfo : [{ country:'COUNTRY_CODE', merchantId:'MERCHANT_ID' }],
             orderValue: '{{ order.information.price_incl}}',
             orderId: '{{order.information.number}}',
             basket:  [{% for product in order.products %}{
           item_id: "{{ product.product_id }}",
           item_name: "{{ product.title }}",
           currency: "{{ order.information.currency | upper }}",
           price: {{ product.base_price_incl | number_format(2, '.', '') }},
           quantity: {{ product.quantity }}
           }{% if not loop.last %},{% endif %}
             {% endfor %}
                      ]
           };
           (function() {
             var s = document.createElement('script');
             s.type = 'text/javascript';
             s.async = true;
             s.src = 'https://s.kk-resources.com/ks.js';
             var x = document.getElementsByTagName('script')[0];
             x.parentNode.insertBefore(s, x);
           })();
       </script>

5. Click on Tracking Code and add the **Conversion Tag.**

![image-20260129-163007.png](https://docs.kelkoogroup.com/__attachments/a_710db71ec67c751b1debd79b74874c1a4cd192696942946b74ac16d2941280e1/image-20260129-163007.png?cb=a96b490007ed004e171dcd2817d950cd)

6. Save the changes.

7. Perform a Test Order.

---
language: "en"
---
# Magento

This is a guide to manually install Kelkoo Sales Tracking if you use Magento 1 or 2 (up to 2.3).

You need to edit part of your code to succeed with this implementation.

## Before setting up your Kelkoo Sales Tracking Tag

### Get your merchantId and associated Country Code

See How To get your merchantId and associated Country Code

### Clean any old version of Kelkoo Sales Tracking

* In your code, remove any Kelkoo Sales tracking tag (search for *leadtag.js* and *_kkstrack*)

* On your website backend, uninstall any Kelkoo Sales Tracking plugin you might have installed

## Magento 1

You need to install two elements:

* the *Leadtag*, in charge of writing the cookie when the user first visits your website

* the *Conversion tag*, in charge of retrieving data from the cookie and registering the sale

**BOTH ARE MANDATORY FOR KELKOO SALES TRACKING TO WORK**

### Install the leadtag

Find and edit the right XML layout and add :
XML

    <reference name="head">
      <block type="core/text" name="kelkoo.lead.tag">
          <action method="setText">
            <text>
              <![CDATA[<script type="text/javascript" src="https://s.kk-resources.com/leadtag.js"></script>]]>
            </text>
          </action>
      </block>
    </reference>

### Install the conversion tag

* Paste this code **at the end of the file**. It gets the Order Value and the Order Id mandatory for Kelkoo Sales Tracking to work.

To add in *web/app/design/frontend/custom/default/template/checkout/success.phtml* , where *custom* is the name of your template.
PHP

    <?php
      $orderObj = Mage::getModel('sales/order')->loadByIncrementId($this->getOrderId());
      $_totalData =$orderObj->getData();
    ?>

* Right after the code added above, add the Conversion tag.

HTML

    <script type="text/javascript">
      _kkstrack = {
        merchantInfo : [{ country:'COUNTRY_CODE', merchantId:'MERCHANTID_VALUE' }],
        orderValue: '<?=$_totalData['grand_total'] ?>',
        orderId: '<?=$this->getOrderId() ?>',
        basket:  []
      };
      (function() {
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://s.kk-resources.com/ks.js';
        var x = document.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
      })();
    </script>

* You need to edit some elements of the Conversion Tag. Those values can be hardcoded as they are the same for all the sales registered.

* *MERCHANTID_VALUE*: This is the unique ID representing your shop within the Kelkoo Group system.

  * Check How To get your merchantId and associated Country Code.

  * If you have multiple MerchantId please check [If you have multiple merchantIds and countries](https://developers.kelkoogroup.com/#multi-country--multi-campaign-integration)

* *COUNTRY_CODE* is the 2-letter country code (lower case) for the country on which your products are listed on Kelkoo Group. Check Full list of Kelkoo Group country codes

## Magento 2

### Install the leadtag

If you want to add Kelkoo Sales Tracking leadtag without creating a module, you can add the following code on your active theme.

To add in *YourTheme/Magento_Theme/layout/default_head_blocks.xml*
HTML

    <script src="https://s.kk-resources.com/leadtag.js" src_type="url"/>

### Install the Conversion tag

* If missing, create *app/code/* under your Magento installation

* Download *magento2-kelkoogroup-salestracking-1.0.0.zip* module for Magento 2 here: <https://github.com/KelkooGroup/magento2-kelkoogroup-salestracking/archive/1.0.0.zip>

* extract the content of the zip file in directory */app/code*

* check directory tree, you should have something similar to:

    app/code/Kelkoo/Modulekelkoost/   
    |- Block   
    |    |- Success.php   
    |- etc   
    |    |- di.xml   
    |    |- module.xml   
    |- registration.php   
    |- view   
    |    |- frontend   
    |    |     |-  layout   
    |    |     |     |- checkout_onepage_success.xml   
    |    |     |-  templates   
    |    |     |     |- checkout   
    |    |     |     |     |- success.phtml 

* Modify *app/code/Kelkoo/Modulekelkoost/view/frontend/templates/checkout/success.phtml* to set the correct country and MerchantId

HTML

    <?php /** @var $block \Kelkoo\Modulekelkoost\Block\Success */ ?>
    <div>
        <?php if ($block->getOrder()->getId()):?>

    <script type="text/javascript">
        var _kkstrack = {
          merchantInfo: [{ country:"country", merchantId:"MerchantId" }],
          orderValue: '<?=$block->getOrder()->getGrandTotal()?>',
          orderId: '<?=$block->getOrder()->getId() ?>'
        };
        (function() {
          var s = document.createElement('script');
          s.type = 'text/javascript';
          s.async = true;
          s.src = 'https://s.kk-resources.com/ks.js';
          var x = document.getElementsByTagName('script')[0];
          x.parentNode.insertBefore(s, x);
        })();
    </script>
      <?php endif; ?>

    </div>

* Enable kelkoost module :

    php bin/magento module:enable Kelkoo_Modulekelkoost 
    php bin/magento setup:upgrade --keep-generated 

## Test your integration

Please check Test Integration

---
language: "en"
---
# Prestashop 1.6x

This is a guide to manually install Kelkoo Sales Tracking if you use Prestashop 1.6 or older.

You need to edit part of your code to succeed with this implementation.

## Before setting up your Kelkoo Sales Tracking Tag

### Get your merchantId and associated Country Code

See How To get your merchantId and associated Country Code

### Clean any old version of Kelkoo Sales Tracking

* In your code, remove any Kelkoo Sales tracking tag (search for *leadtag.js* and *_kkstrack*)

* On your website backend, uninstall any Kelkoo Sales Tracking plugin you might have installed

### Backup your files

Before doing any changes, please remember to back up the files you're going to modify.

### Check Recompile option

* Go to *Advanced settings -\> Performance*

* Make sure option "Recompile files of template if updated" is checked.

## Install the leadtag

* Open the file *themes/custom/header.tpl* (where *custom* is the name of your template, the default being "prestashop")

* Add at the bottom of the file

HTML

    <script async="true" type="text/javascript" src="https://s.kk-resources.com/leadtag.js" ></script>

* Clear the cache.

## Install the conversion tag

* Open the file */controllers/front/OrderConfirmationController.php*

* Search the following line

    public function initContent()
      {

* Add this code

PHP

        /* Kelkoo Sales Tracking */
        $order = new Order($this->id_order);
        $products = $order->getProducts();
        $productsKelkoo=array();
        foreach ($products as $product) {
            $productKelkoo=array('productname'=>$product['product_name'],
                                 'productid'=>$product['product_reference'],
                                 'quantity'=>$product['product_quantity'],
                                 'price'=>$product['unit_price_tax_incl']);
            array_push($productsKelkoo,$productKelkoo);
        }
        $this->context->smarty->assign(array(
            'is_guest' => $this->context->customer->is_guest,          
            'HOOK_ORDER_CONFIRMATION' => $this->displayOrderConfirmation(),        
            'HOOK_PAYMENT_RETURN' => $this->displayPaymentReturn(),
            'products_json' => json_encode($productsKelkoo),
            'sales' => $order->getOrdersTotalPaid(),
            'orderid' => $this->id_order
        ));
        /* end Kelkoo Sales Tracking*/

* Go to the directory *themes/custom* (where *custom* is the name of your template, the default being "prestashop") and open the file *order-confirmation.tpl*

* Add at the bottom of the file

JavaScript

    <script type="text/javascript">
        _kkstrack = {
          {literal}merchantInfo: [{ country:"COUNTRY", merchantId:"MERCHANTID_VALUE" }],{/literal}
          orderValue: '{$sales}',
          orderId: '{$orderid}',
          basket: {$products_json}
        };
        (function() {
          var s = document.createElement('script');
          s.type = 'text/javascript';
          s.async = true;
          s.src = 'https://s.kk-resources.com/ks.js';
          var x = document.getElementsByTagName('script')[0];
          x.parentNode.insertBefore(s, x);
        })();
    </script>

## Customize Conversion tag code

You need to edit some elements of the Conversion Tag

Those values can be hardcoded as they are the same for all the sales registered.

* MERCHANTID_VALUE: This is the unique ID representing your shop within the Kelkoo Group system.

  * Check How To get your merchantId and associated Country Code.

  * If you have multiple MerchantId please check [If you have multiple merchantIds and countries](https://developers.kelkoogroup.com/#multi-country--multi-campaign-integration)

* COUNTRY_CODE is the 2-letter country code (lower case) for the country on which your products are listed on Kelkoo Group. Check Full list of Kelkoo Group country codes

### If you have multiple merchantIds and countries

If you have several Kelkoo Group campaigns running for the same website (multiple MerchantId), you can setup all campaigns within the same tag.

You just need to have the following structure for the *merchantInfo* variable:

    merchantInfo : [
      {
        country:'fr',
        merchantId:'12941513'
      },
      {
        country:'uk',
        merchantId:'56789'
      }
    ]

## If you use PayPal module for payments

If you enabled PayPal payment then you have to change two additional files:

* Open */modules/paypal/controllers/front/submit.php*

* Search for the following line inside the class *PayPalSubmitModuleFrontController* (you should find it at line 46)

    $order = new Order($this->id_order);

* add below

PHP

    /* Kelkoo Sales Tracking */
    $products = $order->getProducts();
    $productsKelkoo=array();
    foreach ($products as $product) {
        $productKelkoo=array('productname'=>$product['product_name'],
                              'productid'=>$product['product_reference'],
                              'quantity'=>$product['product_quantity'],
                              'price'=>$product['unit_price_tax_incl']);
        array_push($productsKelkoo,$productKelkoo);
    }
    $this->context->smarty->assign(array(
        'is_guest' => $this->context->customer->is_guest,          
        'HOOK_ORDER_CONFIRMATION' => $this->displayOrderConfirmation(),        
        'HOOK_PAYMENT_RETURN' => $this->displayPaymentReturn(),
        'products_json' => json_encode($productsKelkoo),
        'sales' => $order->getOrdersTotalPaid(),
        'orderid' => $this->id_order
    ));
    /* end Kelkoo Sales Tracking*/

* Open */modules/paypal/views/templates/front/order-confirmation.tpl*

* Add at the bottom of the file

JavaScript

    <script type="text/javascript">
      _kkstrack = {
        {literal}merchantInfo: [{ country:"COUNTRY", merchantId:"COM_ID" }],{/literal}
        orderValue: '{$sales}',
        orderId: '{$orderid}',
        basket: {$products_json}
      };
      (function() {
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://s.kk-resources.com/ks.js';
        var x = document.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
      })();
    </script>

## Clear Prestashop Cache

Admin \> Advanced Paramaters \> Performance \> Clear Cache

## Test your integration

Please check Test Integration

## If you face issues

Please check Common Issues with Prestashop Integration before contacting the support.

---
language: "en"
---
# Prestashop 1.7x

This is a guide to manually install Kelkoo Sales Tracking if you use Prestashop 1.7 and newer (tested with Prestashop 1.7.8.2)

You need to edit part of your code to succeed with this implementation.

## Before setting up your Kelkoo Sales Tracking Tag

### Get your merchantId and associated Country Code

See How To get your merchantId and associated Country Code

### Clean any old version of Kelkoo Sales Tracking

* In your code, remove any Kelkoo Sales tracking tag (search for *leadtag.js* and *_kkstrack*)

* On your website backend, uninstall any Kelkoo Sales Tracking plugin you might have installed

### Backup your files

Before doing any changes, please remember to back up the files you're going to modify.

### Check Recompile option

* Go to *Advanced parameters -\> Performance*

* Make sure that "Recompile templates if files have been updated " is selected for *Template compilation*.

## Install the leadtag

* Open *themes//templates/_partials/head.tpl* (where *custom* is the name of your template, the default being "prestashop")

* Add

      <script async="true" type="text/javascript" src="https://s.kk-resources.com/leadtag.js" ></script>

* Clear you cache by going to *Admin \> Advanced Paramaters \> Performance \> Clear Cache*

## Install the Conversion tag

* Open the file */controllers/front/OrderConfirmationController.php*

* Replace following code block:

    this->context->smarty->assign(array(
        'HOOK_ORDER_CONFIRMATION' => $this->displayOrderConfirmation($order),
        'HOOK_PAYMENT_RETURN' => $this->displayPaymentReturn($order),
        'order' => $presentedOrder,
        'register_form' => $register_form,
    ));

* With:

    /* Kelkoo Sales Tracking */
    $order = new Order($this->id_order);
    $products = $order->getProducts();
    $productsKelkoo=array();
    foreach ($products as $product) {
        $productKelkoo=array('productname'=>$product['product_name'],
                              'productid'=>$product['product_reference'],
                              'svn1'=>$product['product_quantity'],
                              'svn2'=>$product['unit_price_tax_incl']);
        array_push($productsKelkoo,$productKelkoo);
    }
    $this->context->smarty->assign(array(
        'HOOK_ORDER_CONFIRMATION' => $this->displayOrderConfirmation($order),
        'HOOK_PAYMENT_RETURN' => $this->displayPaymentReturn($order),
        'products_json' => json_encode($productsKelkoo),
        'sales' => $order->getOrdersTotalPaid(),
        'orderid' => $this->id_order,
        'order' => $presentedOrder,
        'register_form' => $register_form,
    ));
    /* end Kelkoo Sales Tracking*/

* Go to directory */themes//templates/checkout/_partials/order-confirmation-table.tpl*

* Add at the bottom the file

    <script type="text/javascript">
        _kkstrack = {
        merchantInfo: [{ country:"COUNTRY", merchantId:"MERCHANTID_VALUE" }],
          orderValue: '{$sales}',
          orderId: '{$orderid}',
          basket: {$products_json nofilter}
        };
        (function() {
          var s = document.createElement('script');
          s.type = 'text/javascript';
          s.async = true;
          s.src = 'https://s.kk-resources.com/ks.js';
          var x = document.getElementsByTagName('script')[0];
          x.parentNode.insertBefore(s, x);
        })();
    </script>

* If you have a */themes//templates/checkout/_partials/order-confirmation-table-simple.tpl* file you also need to update it with same previous code (express checkout).

## Customize Conversion tag code

You need to edit some elements of the Conversion Tag

Those values can be hardcoded as they are the same for all the sales registered.

* MERCHANTID_VALUE: This is the unique ID representing your shop within the Kelkoo Group system.

  * Check How To get your merchantId and associated Country Code.

  * If you have multiple MerchantId please check [If you have multiple merchantIds and countries](https://developers.kelkoogroup.com/#multi-country--multi-campaign-integration)

* COUNTRY is the 2-letter country code (lower case) for the country on which your products are listed on Kelkoo Group. Check Full list of Kelkoo Group country codes.

## If you have multiple merchantIds and countries

If you have several Kelkoo Group campaigns running for the same website (multiple MerchantId), you can setup all campaigns within the same tag.

You just need to have the following structure for the *merchantInfo* variable:

    merchantInfo : [
      {
        country:'fr',
        merchantId:'12941513'
      },
      {
        country:'uk',
        merchantId:'56789'
      }
    ]

* Clear you cache by going to *Admin \> Advanced Paramaters \> Performance \> Clear Cache*

## Test your integration

Please check Test Integration

## If you face issues

Please check Common Issues with Prestashop Integration before contacting the support.

---
language: "en"
---
# Prestashop 8

This is a guide to manually install Kelkoo Sales Tracking if you use Prestashop 8 and newer.

You need to edit part of your code to succeed with this implementation.

## Before setting up your Kelkoo Sales Tracking Tag

### Get your merchantId and associated Country Code

See How To get your merchantId and associated Country Code

### Clean any old version of Kelkoo Sales Tracking

* In your code, remove any Kelkoo Sales tracking tag (search for *leadtag.js* and *_kkstrack*)

* On your website backend, uninstall any Kelkoo Sales Tracking plugin you might have installed

### Backup your files

Before doing any changes, please remember to back up the files you're going to modify.

### Check Recompile option

* Go to *Advanced parameters -\> Performance*

* Make sure that "Recompile templates if files have been updated " is selected for *Template compilation*.

## Install the leadtag

* Open *themes/''/templates/_partials/head.tpl* (where *custom* is the name of your template, the default being "prestashop")

* Add

HTML

      <script async="true" type="text/javascript" src="https://s.kk-resources.com/leadtag.js" ></script>

* Clear you cache by going to *Admin \> Advanced Paramaters \> Performance \> Clear Cache*

## Install the Conversion tag

* Open the file */controllers/front/OrderConfirmationController.php*

* Replace following code block:

PHP

     $this->context->smarty->assign([
         'HOOK_ORDER_CONFIRMATION' => $this->displayOrderConfirmation($this->order),
         'HOOK_PAYMENT_RETURN' => $this->displayPaymentReturn($this->order),
         'order' => (new OrderPresenter())->present($this->order),
         'order_customer' => $this->objectPresenter->present($this->customer),
         'registered_customer_exists' => Customer::customerExists($this->customer->email, false, true),
     ]);

* With:

PHP

    /* Kelkoo Sales Tracking */
    $order = new Order($this->id_order);
    $products = $order->getProducts();
    $productsKelkoo=array();
    foreach ($products as $product) {
      $productKelkoo=array('productname'=>$product['product_name'],
      'productid'=>$product['product_reference'],
      'svn1'=>$product['product_quantity'],
      'svn2'=>$product['unit_price_tax_incl']);
       array_push($productsKelkoo,$productKelkoo);
    }
    $this->context->smarty->assign([
      'HOOK_ORDER_CONFIRMATION' => $this->displayOrderConfirmation($this->order),
      'HOOK_PAYMENT_RETURN' => $this->displayPaymentReturn($this->order),
      'products_json' => json_encode($productsKelkoo),
      'sales' => $order->getOrdersTotalPaid(),
      'orderid' => $this->id_order,
      'order' => (new OrderPresenter())->present($this->order),
      'order_customer' => $this->objectPresenter->present($this->customer),
      'registered_customer_exists' => Customer::customerExists($this->customer->email, false,
      true),
    ]);
    /* end Kelkoo Sales Tracking*/

* Go to directory */themes//templates/checkout/_partials/order-confirmation-table.tpl*

* Add at the bottom the file

JavaScript

    <script type="text/javascript">
        _kkstrack = {
        merchantInfo: [{ country:"COUNTRY", merchantId:"MERCHANTID_VALUE" }],
          orderValue: '{$sales}',
          orderId: '{$orderid}',
          basket: {$products_json nofilter}
        };
        (function() {
          var s = document.createElement('script');
          s.type = 'text/javascript';
          s.async = true;
          s.src = 'https://s.kk-resources.com/ks.js';
          var x = document.getElementsByTagName('script')[0];
          x.parentNode.insertBefore(s, x);
        })();
    </script>

* If you have a */themes/''/templates/checkout/_partials/order-confirmation-table-simple.tpl* file you also need to update it with same previous code (express checkout).

## Customize Conversion tag code

You need to edit some elements of the Conversion Tag

Those values can be hardcoded as they are the same for all the sales registered.

* MERCHANTID_VALUE: This is the unique ID representing your shop within the Kelkoo Group system.

  * Check How To get your merchantId and associated Country Code.

  * If you have multiple MerchantId please check [If you have multiple merchantIds and countries](https://developers.kelkoogroup.com/#multi-country--multi-campaign-integration)

* COUNTRY is the 2-letter country code (lower case) for the country on which your products are listed on Kelkoo Group. Check Full list of Kelkoo Group country codes.

## If you have multiple merchantIds and countries

If you have several Kelkoo Group campaigns running for the same website (multiple MerchantId), you can setup all campaigns within the same tag.

You just need to have the following structure for the *merchantInfo* variable:

    merchantInfo : [
      {
        country:'fr',
        merchantId:'12941513'
      },
      {
        country:'uk',
        merchantId:'56789'
      }
    ]

* Clear you cache by going to *Admin \> Advanced Paramaters \> Performance \> Clear Cache*

## Test your integration

Please check Test Integration

## In Case of Verison Update

The KST needs to be reinstalled after any Prestashop or theme upgrades.

## If you face issues

Please check Common Issues with Prestashop Integration before contacting the support.

---
language: "en"
---
# Shopify/Shopify Plus

## Before setting up your Kelkoo Sales Tracking Tag

### Get your merchantId and associated Country Code

See How To get your merchantId and associated Country Code

### Video Tutorial

The merchant can follow our Video Tutorial to install Kelkoo sales tracking for Shopify. Please refer to the link : [**How to install KST for Shopify**](https://groupleguidecom1-my.sharepoint.com/:v:/g/personal/stream_kelkoogroup_com/IQDV8HOLAZ6SS53MhxTnqPZ8Ae-tNONkp17On8QnfJPKKYM?nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJPbmVEcml2ZUZvckJ1c2luZXNzIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXciLCJyZWZlcnJhbFZpZXciOiJNeUZpbGVzTGlua0NvcHkifX0&e=YMupt5)

## Install Kelkoo Sales Tracking module

### Implement lead tag

* Log in to your Shopify account.

* Navigate to and click on *Settings*.

* Select *Customer Events* from the sub-menu.

* Click on *Add Custom Pixel*.

* Set the name of Pixel as *Kelkoo Leadtag*.

* Edit the following lines of code:

![Shopify_Plus_setting.png](https://docs.kelkoogroup.com/__attachments/a_84957730a8d7bed2f3ac8f0a6a505daf04ce208636ac9302f9791ccec4b47d70/Shopify_Plus_setting.png?cb=c4bb84acc5db58a039a1a6d3020b43bd)  
![Shopify_Plus_Add_Custom.png](https://docs.kelkoogroup.com/__attachments/a_102547609563f7c78820832b2923720236600c1d3bea87ed244b3ab9bc076dd3/Shopify_Plus_Add_Custom.png?cb=97100d6d29aae8b66d2c64e83d897aca)

**Leadtag Script**
JavaScript

    (function() {
        var leadTag = document.createElement('script');
        leadTag.src = 'https://s.kk-resources.com/leadtag.js';
        leadTag.async = true;
        document.head.appendChild(leadTag);
    })();

* Click on Customer Privacy:

  * **Set Permission to Required Marketing / Analytics**

  * **Set Data Sale to Data Collected does not qualify as data sale**

* Scroll to the bottom of the page and select *Connect*.

![Shopify_Plus_Leadtag_setup.png](https://docs.kelkoogroup.com/__attachments/a_9c2fbf8df92a45130f1fb95e42f1ea6c70ccd5bfc5549006cd6888b55bf9c6d5/Shopify_Plus_Leadtag_setup.png?cb=e1089e47b966624ed927931038858d7c)

### Implement conversion tag

Follow similar steps to create Pixel

* Set the name of Pixel as *Kelkoo Conversion*.

* See How To get your merchantId and associated Country Code to get those two pieces of information.

* Edit the following lines of code:

JavaScript

    analytics.subscribe("checkout_completed", event => {
      console.log(event.data.checkout);
      var basketFull = [] ;
      var basketContent ;
      for(i = 0 ; i < event.data.checkout.lineItems.length ; i++) {
        basketContent = {} ;
        basketContent.productname = event.data.checkout.lineItems[i].title ;
        basketContent.productid = event.data.checkout.lineItems[i].id ;
        basketContent.quantity = event.data.checkout.lineItems[i].quantity ;
        basketContent.price = event.data.checkout.lineItems[i].variant.price ;
        basketFull.push(basketContent) ;
      }
      _kkstrack = {       
        merchantInfo : [
              {
                  country:'ADD YOUR COUNTRY CODE HERE',
                  merchantId:'ADD YOUR MERCHANT ID HERE'
              }
          ],     
        orderValue: event.data.checkout.totalPrice.amount,       
        orderId: event.data.checkout.order.id,       
        basket: basketFull     
      };
      (function() {       
        var s = document.createElement('script');       
        s.type = 'text/javascript';       
        s.async = true;       
        s.src = 'https://s.kk-resources.com/ks.js';       
        var x = document.getElementsByTagName('script')[0];       
        x.parentNode.insertBefore(s, x);     
      })(); 
    });

* Click on Customer Privacy:

  * **Set Permission to Not Required**

  * **Set Data Sale to Data Collected does not qualify as data sale**

* Scroll to the bottom of the page and select *Connect*.

![Shopify_Plus_Conversiontag_setup.png](https://docs.kelkoogroup.com/__attachments/a_1782146cafd3bc72c825d9918af1346fd63b6d597d8abedd8d289467a6477c55/Shopify_Plus_Conversiontag_setup.png?cb=321807e095734759dccace92391bdd6e)

#### If you have multiple merchantIds and countries

If you have multiple Kelkoo Group campaigns running for the same website (multiple MerchantId), you can setup all campaigns within the same tag.

You just need to have the following structure for the *merchantInfo* variable:
JSON

    merchantInfo : [
      {
        country:'fr',
        merchantId:'123456'
      },
      {
        country:'uk',
        merchantId:'56789'
      }
    ]

## Test your integration

Please check Test Integration

---
language: "en"
---
# Unas Ecommerce

## Before setting up your Kelkoo Sales Tracking Tag

### Get your merchantId and associated Country Code

See How To get your merchantId and associated Country Code

### Clean any old version of Kelkoo Sales Tracking

* In your code, remove any Kelkoo Sales tracking tag (search for *leadtag.js* and *_kkstrack*)

* On your website backend, uninstall any Kelkoo Sales Tracking plugin you might have installed

## Install Kelkoo Sales Tracking from Unas dashboard

### Step 1: Log in to your Unas dashboard, navigate to the *External marketing systems* through *Marketing* tab

![UnasGotoMarketing.jpg](https://docs.kelkoogroup.com/__attachments/a_3540de66cbc29475e8919b9a9d5afea57b5297c3302d2b062cf5acfc83990103/UnasGotoMarketing.jpg?cb=4fa226e62df0f72f760bd96a3e075e08)

### Step 2: Scroll down to find *Kelkoo Group logo* .

![UnasExternalmarketingsystems.jpg](https://docs.kelkoogroup.com/__attachments/a_ae9f373d809cb9aba7e5a386851b3cd34f770bcb0bfb8f8d3aec3cde3e598dd6/UnasExternalmarketingsystems.jpg?cb=ee418f65375dbdce3cf077f908b48481)

### Step 3: Click on *Add* button.

![UnasSelectKelkooPlugin.jpg](https://docs.kelkoogroup.com/__attachments/a_65bf023e5c1d7d59dc5d963064f199b58d0ac2669a9cd773def05699bc9f6914/UnasSelectKelkooPlugin.jpg?cb=5b40f73aa0cfa2721726b253453e311a)

### Step 4: Activate it by entering your *merchantID* and *Save* changes.

![UnasKelkooPlugininside.jpg](https://docs.kelkoogroup.com/__attachments/a_2355b41ac1e4bc3d6e51f92c20f17c2245df37b35535281b71573ba5e406e2e4/UnasKelkooPlugininside.jpg?cb=2fac37643eb667fa1a389aad0cdd4ce5)

* *merchantID*: This is the unique ID representing your shop within the Kelkoo Group system.

  * Check How To get your merchantId and associated Country Code.

  * If you have multiple MerchantId please see below

* *Country* here depends on the languages you add on *Settings/Texts,Languages/Setting languages*. Check Full list of Kelkoo Group country codes

## If you have multiple merchantIds and countries

If you have several Kelkoo Group campaigns running for the same website (multiple MerchantId), you can setup all campaigns in the *Kelkoo Group Sales tracking - multiple campaign*.

In order to setup a *Multi Merchant Campaign*, the web shop needs to have multiple languages set in the admin interface as shown.

### Step 1: In your Unas dashboard, navigate to the *Setting languages* through *Settings/Texts,Languages/*

![Unas_language.png](https://docs.kelkoogroup.com/__attachments/a_0597113052495dc2a9014de87795d65908d0ab1ac44fa0e650bf9b112fd99ec5/Unas_language.png?cb=985c2c6f71343f75ab03a8840c3eba72)

### Step 2: Add required language/country.

![Unas_addlanguage.png](https://docs.kelkoogroup.com/__attachments/a_ba6c7660918dc7261f1851f9873d60938accffdf7716e37a3ca7df592030e3d7/Unas_addlanguage.png?cb=06f9a3265749843a8369d2ecdd494b18)

### Step 3: Add merchantID provided for specific countries and *Save* changes

![Unas_kelkoomulticampaignsetup.png](https://docs.kelkoogroup.com/__attachments/a_31c2e17c9038968873a5277f29477e36b0ee2c6446f5b771a95954949e3e1ff4/Unas_kelkoomulticampaignsetup.png?cb=eeeb5fbf665afdfb639b852d80d760fa)

## Test your setup

Please check Test Installation

---
language: "en"
---
# WooCommerce

## Before setting up your Kelkoo Sales Tracking Tag

### Get your merchantId and associated Country Code

See How To get your merchantId and associated Country Code

### Clean any old version of Kelkoo Sales Tracking

* In your code, remove any Kelkoo Sales tracking tag (search for *leadtag.js* and *_kkstrack*)

* On your website backend, uninstall any Kelkoo Sales Tracking plugin you might have installed

## Install Kelkoo Sales Tracking from Wordpress dashboard

* Log in to your WordPress dashboard, navigate to the *Plugins* menu

![woocommerceinstallation1.png](https://docs.kelkoogroup.com/__attachments/a_a9838878577b29c9f6f8fe90bddc86dd678e8e5db750e6c6a04b69b1cbdb2b2c/woocommerceinstallation1.png?cb=54154ca4efae87eb02d7c46b49ed9dc5)

* Click *Add New*.

![woocommerceinstallation2.png](https://docs.kelkoogroup.com/__attachments/a_20550cdf59d81934c1617b437071c491bf9a082ecff72a70b293080cf7c4fa13/woocommerceinstallation2.png?cb=ef99c529ab390925e4fed7f63f18e251)

* In the search field type *Kelkoo Group sales tracking* and click *Search Plugins*.

![woocommerceinstallation3.png](https://docs.kelkoogroup.com/__attachments/a_df2554d8919e909b80700f3738231485e5fb7eedd096ff21baa5f1f0cfd758f2/woocommerceinstallation3.png?cb=a5a69deb533adb0c46dfc11e82adccc8)

* You can install it by simply clicking *Install Now*.

![woocommerceinstallation4.png](https://docs.kelkoogroup.com/__attachments/a_8a4899d14a3e954c7d38e0bb496b526f73fb26c90e9a102dfcad5bb3a43dce63/woocommerceinstallation4.png?cb=0c2c28cd006b85a0b13a06a49e098d17)

* Once installed navigate to the *Plugins* menu again and activate the plugin

![woocommerceinstallation5.png](https://docs.kelkoogroup.com/__attachments/a_3750c46595f0f30d0f40f145c30dbdf0b0e471f4e3fa5dc4cb608e19275a3972/woocommerceinstallation5.png?cb=45f8feb18cf034d3163fa927a8387977)

## Install Kelkoo Sales Tracking from source

* Download Kelkoo Group Salestracking plugin here: <https://wordpress.org/plugins/kelkoogroup-sales-tracking/>

* Go to folder */wp-content/plugins* and unzip the zip file

* Log to your WordPress admin dashboard, go to *Plugins* , Click *Activate*

## Configure the plugin

* On *Plugin* page go to *Settings* and click on the Kelkoo Group link

* Complete the form with information related to your Kelkoo Group subscription

![woocommerceinstallation6.png](https://docs.kelkoogroup.com/__attachments/a_a9531c88ebec798fba76d372052ee0a92d957c89b5a901cf2b91d60fc42703df/woocommerceinstallation6.png?cb=a73c05c4d88840225a2f67fe291c098b)

* *Merchant Identifier*: This is the unique ID representing your shop within the Kelkoo Group system.

  * Check How To get your merchantId and associated Country Code.

  * If you have multiple MerchantId please see below

* *Country* is the 2-letter country code (lower case) for the country on which your products are listed on Kelkoo Group. Check Full list of Kelkoo Group country codes

## If you have multiple merchantIds and countries

If you have several Kelkoo Group campaigns running for the same website (multiple MerchantId), you can setup all campaigns in the *Kelkoo Group Sales tracking - multiple campaign*.

The *Multi Merchant Information* variable needs to have the following structure :

    merchantInfo : [
      {
        country:'fr',
        merchantId:'12941513'
      },
      {
        country:'uk',
        merchantId:'56789'
      }
    ]

## Test your setup

Please check Test Installation

---
language: "en"
---
# Installation via Google Tag Manager (GTM) with Enhanced Ecommerce

If your website uses Google Tag Manager (GTM), this is the recommended method for installing Kelkoo Sales Tracking (KST).

## Video tutorial

You can also follow our video tutorial:[**How to Install KST using GTM**](https://groupleguidecom1-my.sharepoint.com/:v:/g/personal/stream_kelkoogroup_com/IQAekZ_Rdd8oRqOHZXHLwtSEAQbyieSnrYOEQi4-GStoC64?nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJPbmVEcml2ZUZvckJ1c2luZXNzIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXciLCJyZWZlcnJhbFZpZXciOiJNeUZpbGVzTGlua0NvcHkifX0&e=c4t22X)

## Step 1: Identify the Data Layer variables

Before configuring Kelkoo Sales Tracking, you need to identify the Data Layer variables used by your website for purchase events.

### 1.1 Start GTM Preview mode

From your Google Tag Manager workspace, click **Preview** to launch Tag Assistant.

### 1.2 Connect your website

In the Tag Assistant window, enter your website URL and click **Connect**.

Make sure the URL belongs to the website on which the relevant GTM container is installed.

### 1.3 Check the connection

Your website should open in a new browser tab.

In Tag Assistant, confirm that the connection status is displayed as **Connected**.

### 1.4 Complete a test purchase

On the website opened in the previous step, complete a test purchase.

### 1.5 Find the purchase event

Return to Tag Assistant.

In the event list on the left, locate the event corresponding to the order confirmation or thank-you page.

### 1.6 Identify the relevant ecommerce event

Select the event associated with the completed purchase.

The exact event name depends on your website's GTM and Enhanced Ecommerce implementation.

### 1.7 Identify the required values

Open the **Data Layer** tab and identify the following values:

* **Event name**

* **Order ID**

* **Order value**

For example:

* Event name: `purchase`

* Order ID: `ecommerce.purchase.transaction_id`

* Order value: `ecommerce.purchase.value`

![GTM_datalayer_example.png](https://docs.kelkoogroup.com/__attachments/a_72858992fd75393548687f321b5d7efc5fc2cbfe4512579db2cf2f25428d5018/GTM_datalayer_example.png?cb=be65cac08219c0a5c637da666765dbe0)

**Important:** Data Layer variables vary from one website to another. The examples above may therefore differ from those used on your website.

If you cannot find equivalent purchase information in the Data Layer, contact your ecommerce platform or implementation provider to check whether Enhanced Ecommerce data is being sent to GTM. Depending on your ecommerce platform, a plugin or extension may also be available to provide the required GTM ecommerce integration.

## Step 2: Create GTM user-defined variables

You now need to create GTM variables for the Order ID and Order Value identified in Step 1.

### 2.1 Open Variables

In your GTM workspace, select **Variables** from the left-hand menu.  
![2.1GTM_variables_menu.png](https://docs.kelkoogroup.com/__attachments/a_b5ed07d651dee25320cec8d9173eb0be5022595ed7ac39756c9b1e3d891a1131/2.1GTM_variables_menu.png?cb=f57f0dffafeb8810f76c0648f84b25f5)

### 2.2 Create a new variable

Under **User-Defined Variables** , click **New**.  
![2.2GTM_variables_menu.png](https://docs.kelkoogroup.com/__attachments/a_533db9fc47062ebb69ee7d614c352398c8f427352d3cd9295cd3a075a9464acb/2.2GTM_variables_menu.png?cb=563759d6a23bfd6fc374d799b697e2ae)

### 2.3 Select the variable type

Click **Variable Configuration** , then select **Data Layer Variable**.  
![2.3GTM_variable_menu.png](https://docs.kelkoogroup.com/__attachments/a_6e5452973a1645e65d10ec0ea8d6044c956de44774d515337e04c70909325df6/2.3GTM_variable_menu.png?cb=16f7c2dc96dfe53cfcef63272157f571)

### 2.4 Create the Order ID variable

In **Data Layer Variable Name**, enter the Order ID variable identified in Step 1.7.

For example:

`ecommerce.purchase.transaction_id`

Give the variable a clear name, such as **Order ID**, and save it.  
![2.4GTM_variable_menu.png](https://docs.kelkoogroup.com/__attachments/a_d7ad0246365616e85c32a90e1b33a269b12180a30b80f6985ac2f37c148d7541/2.4GTM_variable_menu.png?cb=c85b53dfddaac39a610f00dec3ecc219)

### 2.5 Create the Order Value variable

Repeat the previous step using the Order Value variable identified in Step 1.7.

For example:

`ecommerce.purchase.value`

Give the variable a clear name, such as **Order Value**, and save it.

## Step 3: Create a trigger for the purchase event

Next, create a GTM trigger that fires when the purchase event identified in Step 1 occurs.

### 3.1 Open Triggers

From the left-hand menu, select **Triggers**.  
![3.1GTM_event_menu.png](https://docs.kelkoogroup.com/__attachments/a_d85da2136b7f4143f950385978f208a4cbe2095958b6825de09a3eaf505d712c/3.1GTM_event_menu.png?cb=2a8044d73e75d7de4a947c8278a027ee)

### 3.2 Create a new trigger

Click **New** , then click **Trigger Configuration**.  
![3.2.1GTM_event_menu.png](https://docs.kelkoogroup.com/__attachments/a_9dd2487fb9cd3969431e38f931855d74fba1ef3aeaea810a902ca6faf3073fac/3.2.1GTM_event_menu.png?cb=5e046a535f5b98b14eb2b9b1956e30eb)

### 3.3 Select Custom Event

Choose **Custom Event** as the trigger type.  
![3.3GTM_event_menu.png](https://docs.kelkoogroup.com/__attachments/a_251a7f624a441d60913d8ef1e0d41b610260f2deade5f7079119b7dae0834eb4/3.3GTM_event_menu.png?cb=df6636a1a2a9e1ff445e017ddaec5969)

### 3.4 Configure the event

In **Event name**, enter the event name identified in Step 1.7.

For example:

`purchase`

Configure the trigger to fire on the appropriate purchase event, as shown in the screenshot below.  
![3.4GTM_event_menu.png](https://docs.kelkoogroup.com/__attachments/a_485cf80b1a2bf28ec4fa2d40f5147fcfc3aac6f17e765c3f6470e9a30989092f/3.4GTM_event_menu.png?cb=dc897baa3c51314516d48ca2c4016580)

### 3.5 Save the trigger

Give the trigger a clear name, such as **Purchase Event** , and click **Save**.

## Step 4: Install the Kelkoo Sales Tracking tag

### 4.1 Open the Template Gallery

In GTM, select **Templates**.

Under **Tag Templates** , click **Search Gallery**.  
![4.1GTM_KST_Tag.png](https://docs.kelkoogroup.com/__attachments/a_631d10a45ab9e1e0b8eebf9d674bab1633bbedd8cc22fd7fa5fd7fd0b7cf4c4d/4.1GTM_KST_Tag.png?cb=48f05d9e5e6391d260e40d8dfa975b27)

### 4.2 Add the Kelkoo Group template

Search for **Kelkoo Group Sales Tracking Tag** and select it.

In the Template Details window, click **Add to workspace**.  
![4.2GTM_KST_Tag.png](https://docs.kelkoogroup.com/__attachments/a_5eb10123c19620283a8083ba70dbfa186983bbb21d3f66e4aa810d981352cbfc/4.2GTM_KST_Tag.png?cb=c80721091febfc895b71cab37038a70e)

### 4.3 Create the Kelkoo Sales Tracking tag

Go to **Tags** and create a new tag.

Under **Tag Configuration** , select the **Kelkoo Group Sales Tracking Tag** template.  
![4.3GTM_KST_Tag.png](https://docs.kelkoogroup.com/__attachments/a_bdd3ec42e4b33ef3c23d72c5031d1bd0b3418c7b373bff4057bee411126c8f00/4.3GTM_KST_Tag.png?cb=854375dde3c63beddd1ae3973fb772f6)

### 4.4 Configure the tag

Configure the tag using:

* Your **Country Code**

* Your **Merchant ID**

* The **Order ID** GTM variable created in Step 2

* The **Order Value** GTM variable created in Step 2

Use the variable selector to choose the existing GTM variables created in Steps 2.4 and 2.5. Do not enter their names as plain text.  
![4.4GTM_KST_Tag.png](https://docs.kelkoogroup.com/__attachments/a_9dcabff145768e3d2062dc5ba5b07250c883057fff5e157967a9219e1eaeba97/4.4GTM_KST_Tag.png?cb=8f453ab6554431a81e225ede36f9cbf2)

### 4.5 Add the purchase trigger

Under **Triggering**, select the custom purchase event trigger created in Step 3.

This ensures that the Kelkoo Sales Tracking tag fires when a purchase is completed.  
![4.5GTM_KST_Tag.png](https://docs.kelkoogroup.com/__attachments/a_d9dfa17bf83ac8fdc0ef8372f8474b905eeab8e71c5044c6f1eb2689772bb8ac/4.5GTM_KST_Tag.png?cb=fbf21e87595963401a1671a814e42733)

### 4.6 Save the tag

Click **Save**.

## Step 5: Install the Kelkoo Lead Tag

The Kelkoo Lead Tag must also be installed and configured to fire on every page.

### 5.1 Create the Lead Tag

From the **Tags** menu, create a new **Custom HTML** tag.

Add the following code:
HTML

    <script async="true" type="text/javascript" src="https://s.kk-resources.com/leadtag.js"></script>

Under **Triggering** , select **All Pages**.  
![5.1GTM_custom_html_lead_tag.png](https://docs.kelkoogroup.com/__attachments/a_1df8ebf0e85f7e95dda7dea0b2a86ba1b82f8414663993ed35a527a0ced4287e/5.1GTM_custom_html_lead_tag.png?cb=ec349fa08276d6361d06eb09bc40cd20)  
![5.2GTM_custom_html_lead_tag.png](https://docs.kelkoogroup.com/__attachments/a_a6066ce3fb846159fd120bd97860de556e6b3dbdd3c17411f29a73cdbdc0e670/5.2GTM_custom_html_lead_tag.png?cb=694556dc43f79c4d1df0e26078edf0a0)  
![5.3GTM_custom_html_lead_tag.png](https://docs.kelkoogroup.com/__attachments/a_6af86983740e6f73423f6ec9525e89b073fdf13dda29dc094b6257039933378c/5.3GTM_custom_html_lead_tag.png?cb=f75ea0036f7e8705259728c095974543)

### 5.2 Save and publish

Save the tag.

Once you have completed the configuration, **Preview** your GTM container to verify that the tags fire as expected.

When you are satisfied with the setup, publish your GTM changes to complete the Kelkoo Sales Tracking installation.

## Test your setup

Once the installation is complete, we strongly recommend testing your implementation to make sure Kelkoo Sales Tracking is working correctly.

See **Test your Kelkoo Sales Tracking setup** for instructions.

## Troubleshooting

If you experience any issues with your installation, see [Troubleshooting GTM Integration](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/troubleshooting/troubleshooting-gtm-integration.md) before contacting our Support team.

---
language: "en"
---
# Manual installation for Kelkoo Sales Tracking

## Overview

Use this installation method if you are **not using Google Tag Manager (GTM)** or if you prefer to integrate Kelkoo Sales Tracking directly into your website's source code.

This guide explains how to manually install the two tags required for Kelkoo Sales Tracking:

* **Lead Tag** -- sets a first-party tracking cookie when a user visits your website.

* **Conversion Tag** -- reads the tracking cookie and sends completed order information to Kelkoo.

> **Important**
>
> Both the **Lead Tag** and the **Conversion Tag** must be installed. Without both tags, Kelkoo Sales Tracking cannot correctly attribute conversions.

## Before You Begin

Before installing the tags, make sure you have:

* Access to your website's source code.

* Your **Merchant ID** and **Country Code**.

* Access to the order confirmation (thank-you) page.

## Find Your Merchant ID and Country Code

Log in to your Kelkoo Merchant Portal and [retrieve your **Merchant ID** and associated **Country Code**](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/how-to-get-your-merchantid-and-associated-country-code.md).

These values are required when configuring both tracking tags.

## Remove Previous Installations

If your website already includes an older version of Kelkoo Sales Tracking, remove it before installing the new tags (search for `leadtag.js` and `_kkstrack`).

Running multiple versions of the tracking code may result in duplicate or incorrect conversion tracking.

## Step 1 - Install Lead tag

The Lead Tag sets the first-party tracking cookie used to attribute future conversions.

Add the following script to **every page of your website** , immediately before the closing `</head>` tag.
HTML

    <script async="true" type="text/javascript" src="https://s.kk-resources.com/leadtag.js" ></script>

Once installed, the Lead Tag will automatically create the tracking cookie for eligible visitors.

## Step 2 -- Install the Conversion Tag

The Conversion Tag sends completed order information to Kelkoo.

Add the following script to your **order confirmation (thank-you) page** , immediately before the closing `</body>` tag.
HTML

    <script type="text/javascript">
        _kkstrack = {
          merchantInfo : [{ country:'COUNTRY_CODE', merchantId:'MERCHANTID_VALUE' }],
          orderValue: 'ORDER_VALUE',
          orderId: 'ORDER_ID',
          basket:  [{ productname: 'name of product 1',
                     productid: '11111',
                     quantity: '1',
                     price: '4.2'
                    },
                    { productname: 'name of product 2',
                     productid: '22222',
                     quantity: '3',
                     price: '8.6'
                    }
                   ]
        };
        (function() {
          var s = document.createElement('script');
          s.type = 'text/javascript';
          s.async = true;
          s.src = 'https://s.kk-resources.com/ks.js';
          var x = document.getElementsByTagName('script')[0];
          x.parentNode.insertBefore(s, x);
        })();
    </script>

### Configure the Conversion Tag

Replace the placeholder values in the Conversion Tag with values from your website.

Some values remain the same for every order, while others must be populated dynamically.

#### Configuration Values

The following values are fixed and can be hard-coded in your implementation.  

|     Parameter      |                Description                 |
|--------------------|--------------------------------------------|
| `MERCHANTID_VALUE` | Your Kelkoo Merchant ID. Example: "123456" |
| `COUNTRY_CODE`     | Your Merchant Country Code. Example: "fr"  |

#### Order-Specific Values

The following values must be populated dynamically for every completed order.  

|   Parameter   |                                                                                                                 Description                                                                                                                 |
|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `ORDER_ID`    | Unique order identifier If you use an analytics platform such as Google Analytics and want to compare its data with Kelkoo's reporting, use the same order identifier in both tracking tags.                                                |
| `ORDER_VALUE` | Total order amount. We recommend including VAT and shipping costs. If you use an analytics platform such as Google Analytics and want to compare its data with Kelkoo's reporting, ensure that the same order value is passed to both tags. |
| `Basket`      | List of purchased products. See [Add Basket Information](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/advanced-setup/add-basket-information.md) for more details.                                                            |

Your website must provide the actual values for each completed order.
> **Note**
>
> This step requires access to your website's order data. The implementation depends on your platform and programming language. If you're unsure how to retrieve these values, contact your developer or technical team.

### If you have multiple merchantIds and countries

If you run several Kelkoo Group campaigns for the same website, each with a different **Merchant ID** and/or **Country Code**, you can configure them all within the same tag.

Add one entry to the `merchantInfo` array for each campaign:
JSON

    merchantInfo : [
      {
        country:'fr',
        merchantId:'12941513'
      },
      {
        country:'uk',
        merchantId:'56789'
      }
    ]

## Consent Management (CMP)

If your website uses a Consent Management Platform (CMP), configure it so that Kelkoo's tracking tags run only after the required user consent has been obtained.

Incorrect CMP configuration may prevent conversions from being attributed correctly.

## Verify Your Installation

After completing the installation, verify that both tags are working correctly.

Follow the [Test Your Kelkoo Sales Tracking Setup guide](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/test-your-kelkoo-sales-tracking-setup.md) to confirm that:

* the Lead Tag is loaded on all pages;

* the Conversion Tag is triggered on the order confirmation page;

* the tracking cookie is created correctly;

* conversions are successfully recorded by Kelkoo.

## Troubleshooting

If conversions are not being tracked correctly, check the following:

* Both tags are installed.

* Only one version of the tracking code is present.

* The Lead Tag loads before the Conversion Tag.

* Dynamic order values are correctly populated.

* Your CMP allows the tags to run after consent is granted.

* The browser console does not report any JavaScript errors.

If the issue persists, contact Kelkoo Support and include:

* your Merchant ID;

* the URL of your order confirmation page (if accessible);

* screenshots or browser console logs where possible.

---
language: "en"
---
# Test your Kelkoo Sales Tracking setup

## How to test your implementation

* Go on your *Kelkoo Merchant Center* and log into your account

* Select the campaign you want to test in the top left selector

![campaignselector.png](https://docs.kelkoogroup.com/__attachments/a_f544b86a62ad4cada7b129df9d605aec07194e974a53c0e1fc3b6534738f6132/campaignselector.png?cb=5cbcac769579dd1264cd24b4ed840512)

* then click on the Kelkoo Sales Tracking Installer link in the left menu or directly click [here](https://merchant.kelkoogroup.com/app/campaign/sales-tracking)

![image-20260311-181013.png](https://docs.kelkoogroup.com/__attachments/a_0b3aff7f596bc7ef18d13438716078ae79d8dfeeb06710d584fcebe4c6239427/image-20260311-181013.png?cb=d817a10b9494362ca144d911934a30f1)

The tool is structured around 4 sections:

* Warning banner that will appear in all pages if your Kelkoo Sales Tracking installation is not working properly.

* A Tester section to help you install and test your setup in 3 simple steps

* A Status section that will give you more information about potential errors/warnings

* The Last Call Registered section that lists the last calls we've received from your Kelkoo Sales Tracking pixel with all the information sent.

## Verify that we register sales

You simply need to follow the Tester wizard and check the Status/Last Call registered section for further information

## Verify that we correctly process sales information

If we register sales correctly, the following day of your test sale, please check the *Statistics* section in your Merchant Center. You should see your sales recorded with the correct order value.

**Important! Check regularly that sales are being registered. This is even more important to do after you have implemented updates or changes to your site.**

## In case of issues, check our troubleshooting guide

If you are facing issues on the tracking or sales processing part, please have a look at our Common Issues section.

---
language: "en"
---
# Troubleshooting

If you face a problem, the first thing to do is to use the Kelkoo Sales Tracking Debugging tool available [here](https://merchant.kelkoogroup.com/app/campaign/sales-tracking).

If this is not sufficient, here is a list of troubleshooting guides for the most common installation methods:

* [Troubleshooting GTM Integration](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/troubleshooting/troubleshooting-gtm-integration.md)
* [Troubleshooting Prestashop integration](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/troubleshooting/troubleshooting-prestashop-integration.md)
* [Troubleshooting Shopify integration](https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/troubleshooting/troubleshooting-shopify-integration.md)

And if nothing helps, you can directly contact our support team via our [contact form](https://merchant.kelkoogroup.com/app/contact) and select Subject = "Kelkoo Sales Tracking troubleshooting". Our experienced team will come back to you ASAP.

---
language: "en"
---
# Troubleshooting GTM Integration

## Verify that your GTM makes the correct call

* Go on your *Kelkoo Group Merchant Extranet* and log into your account then click on the link *View your Kelkoo store page* in the top right corner of the Home page

* Click on one of your offers to be redirected to your website

* Open "developer console" (usually F12, otherwise right-click on page and "inspect element"), then open "network" tab.

* Check if you have a */gtm* call:

![TestIntegration5.png](https://docs.kelkoogroup.com/__attachments/a_9dd3919dabe1636cb70ae0b23f1c1ccbdd4302fa7a12012d4ce737cbfb2739fe/TestIntegration5.png?cb=cfe193a988bf1c2cea74301494ef33fe)

* Open */gtm* call content (usually right-click on call then "open in new tab")

* Check if you find *leadtag* value in the page

* Check if you find *kkstrack* value and check that merchantId/country are ok.

## Common issues with GTM integration

### Common Issue 1: Integration has not been published

* Ensure that you have published the integration.

### Common Issue 2: orderId/orderValue fields are undefined when firing Kelkoo Group tag

* Verify that you have removed all existing Kelkoo Group tag

* Re-install from scratch the tag using our brand new GTM template, available here: <https://www.kelkoogroup.com/support/merchants-support/google-tag-manager-integration/>

* Make sure that variables used for orderId/orderValue fields in template are the good ones: It can be checked in GTM debug mode when doing a fake sale: variables must not be *undefined* when firing Kelkoo Group tag

* If your variables are *undefined* it might be because you use Google conversion tag variables, and these variables are pushed in the datalayer **below** the GTM snippet in confirmation page (see below for more details)

* If the variables are declared after the GTM, then the Firing Trigger must be a *Page View - DOM ready* trigger instead of *All Pages Page View* (see below for more details)

### Common Issue 3: datalayer and GTM are not called in the correct order

* If you manually fill the GTM datalayer with the *kkstrack* script in the source code of the page, integration order is important

* Make sure the datalayer is **above** the GTM snippet.

Correct datalayer/GTM snippet integration order:  
![CorrectGTMIntegrationOrder.png](https://docs.kelkoogroup.com/__attachments/a_ee53ebc43156830d60f07a5d1502a4583b4b2597004ad9c6fbff20533ba318c4/CorrectGTMIntegrationOrder.png?cb=43a06a1830467d933bbc70447cace805)

Incorrect datalayer/GTM snippet integration order:  
![IncorrectGTMIntegrationOrder.png](https://docs.kelkoogroup.com/__attachments/a_b9275b441af28d898dbb5ab7a6fb19eb41b1cedb768e6d2e73f6125a1f9a4d29/IncorrectGTMIntegrationOrder.png?cb=d8635f9d3d54877a3d03c2f8073ca313)

### Common Issue 4: Kelkoo Group Tag not triggered on *DOM ready* event

* The Kelkoo Group tag must be triggered on *DOM ready* event, not custom event, to be sure variables are available.

* This has to be checked when you notice that you constantly move back and forth from Kelkoo Sales Tracking V1 to V2 (visible in your Merchant Extranet).

### Common Issue 5: missing or wrong double quotes to declare variable name

* In Google Tag Manager, for a variable to be interpreted it must be put between **double brackets**:

* For example, do not write 'orderValue': 'dlv_revenue_media' but 'orderValue': '{{dlv_revenue_media}}' \*\*BRACKETS ARE MANDATORY AROUND VALUE \*\*

> When you type the opening double brackets, a menu will appear to offer you the list of available variables, in order to avoid typos in the name of the variables

* Be sure to use the classic double quote in code;

  * You can sometimes use not well encoded double quotes: you must use " character and not " character (subtle difference; the second one is utf-8 character <https://www.fileformat.info/info/unicode/char/201c/index.htm> which must NOT be used)

  * Correct example: {country: "de", merchantId: "100522210"}, {country: "nl", merchantId: "100516712"}

  * Wrong example: {country:"de",merchantId:"100522210"},{country:"nl",merchantId:"100516712"}

### Common Issue 6: Tag priority is not correct

* If you use a GTM custom HTML tag, in the Advanced Settings of the tag they must set the priority to 3, so that the tag is fired before the Kelkoo Group Sales Tracking Tag.

---
language: "en"
---
# Troubleshooting Prestashop integration

## Common Issue 1: Variables are not replaced in the order confirmation page source code

Check that there not *{literal}* around the tag

    <script type="text/javascript">
        _kkstrack = {
    ...

## Common Issue 2: Wrong template

You need to edit the correct file to implement Kelkoo Sales Tracking. Please verify which file you have edited.

## Common Issue 3: Cache has not been refreshed

Whenever you make a change in your file, you need to refresh your cache. Go to your *Admin panel \> Advanced \> Performance \> Refresh cache*

---
language: "en"
---
# Troubleshooting Shopify integration

## Common Issue 1: Tag added in device-specific sections

* In the file where we have to add the lead tag, there can be dedicated sections for mobile and desktop.

* Make sure the tag is added outside of those section for it to be fired on all devices.

* To be checked when you see in your Merchant Extranet that you constantly moves back and forth between V1 and V2.

## Common Issue 2: Currency, and comma issues with Shopify integration

Some merchants had issues with all order values with more than 4 digits. The Shopify currency format was {{ amount_no_decimals }} where the standard configuration is with {{amount}}.

If Shopify is configurated with another format, the merchant has to adapt the code for orderValue and price attributes:  

|                 Money format                  | Rounded | Example  |                                           Code suggestion                                            |
|-----------------------------------------------|---------|----------|------------------------------------------------------------------------------------------------------|
| {{ amount }}                                  | No      | 1,134.65 | orderValue: '{{ order.total_price \| money_without_currency \| remove: ',' }}',                      |
| {{ amount_no_decimals }}                      | Yes     | 1,135    | orderValue: '{{ order.total_price \| money_without_currency \| remove: ',' }}',                      |
| {{ amount_with_comma_separator }}             | No      | 1.134,65 | orderValue: '{{ order.total_price \| money_without_currency \| remove: '.' \| replace: ',', '.' }}', |
| {{ amount_no_decimals_with_comma_separator }} | Yes     | 1.135    | orderValue: '{{ order.total_price \| money_without_currency \| remove: '.' }}',                      |
| {{ amount_with_apostrophe_separator }}        | No      | 1'134.65 | orderValue: '{{ order.total_price \| money_without_currency \| remove: '\\'' }}',                    |

---
language: "en"
---
# Remove obsolete LeGuide tracking

## What to look for to clean the LeGuide tracking

On your confirmation page, look for this line

    <script src="https://secure.cimg.leguide.com/js/lgtrk-1.3.min.js" type="text/javascript" async=""></script>

This has to be removed. In your codebase, it should be generated by this block of code

    <script type="text/javascript"> var lgtrk_data = { version : "1.3", idshop : "29097548", pt : "purchase", price : "274.92", idp : "20156", qty_idp : "1", price_idp : "274.92" }; (function(a,b,c,d){ a=('https:' == document.location.protocol ? 'https://secure.' : 'http://') + "cimg.leguide.com/js/lgtrk-"+lgtrk_data.version+".min.js"; b=document;c='script';d=b.createElement(c);d.src=a;d.type='text/java'+c;d.async=true; a=b.getElementsByTagName(c)[0];a.parentNode.insertBefore(d,a); })(); </script>

---
language: "en"
---
# Understanding Kelkoo Sales Tracking

**Kelkoo Sales Tracking (KST)** allows Kelkoo Group to measure the sales generated by the traffic we send to your website.

KST uses a first-party identifier to recognise visits originating from Kelkoo Group and connect them with subsequent purchases. This allows us to measure campaign performance and optimise the traffic we send to you.

## How does Kelkoo Sales Tracking work?

Kelkoo Sales Tracking uses two main components:

### Lead Tag

The **Lead Tag** is loaded when a user visits your website after clicking a Kelkoo Group ad.

The Kelkoo click contains a unique identifier in the `kk` URL parameter. The Lead Tag retrieves this identifier and, when the required consent has been obtained, stores it using first-party browser storage.

Because the identifier is stored on your website's domain rather than on a Kelkoo Group domain, it is considered **first-party**.

The stored identifier allows KST to recognise the original Kelkoo visit if the user returns to your website and completes a purchase later.

### Conversion Tag

The **Conversion Tag** fires whenever an order is completed.

It sends the transaction information required by Kelkoo Group, such as:

* the Order ID;

* the Order Value;

* the Kelkoo identifier, when available;

* additional transaction information, depending on your implementation.

The Sales Tracking Tag should fire for **every completed order**, regardless of the traffic source responsible for the user's final visit.

Kelkoo Group then applies its attribution logic to determine whether the transaction should be attributed to Kelkoo traffic.  
![NonTechnicalKSTView.png](https://docs.kelkoogroup.com/__attachments/a_504d2b40141484487631648f5b96a30a3e62908f5c3e82491d9322e7b32c320a/NonTechnicalKSTView.png?cb=f2af6b5328ae5423b2da39bf9c6da6d2)

## Attribution model

Kelkoo Sales Tracking uses a **Kelkoo Channel Last Click** attribution model with a **30-day conversion window**.

### How does attribution work?

When a user clicks a Kelkoo Group ad, KST stores the identifier associated with that visit.

If the same user completes a purchase within the following 30 days, the sale can be attributed to Kelkoo Group.

This remains the case if the user returns to your website through another channel before completing the purchase.

For example:

**Day 1:** User clicks a Kelkoo Group ad → visits your website → does not purchase

**Day 5:** User returns through an organic Google search → does not purchase

**Day 10:** User returns directly to your website → completes a purchase

In this example, Kelkoo Sales Tracking attributes the sale to **Kelkoo Group**, because the user clicked through Kelkoo within the previous 30 days.
> **Important**
>
> Kelkoo Sales Tracking attribution differs from the attribution used by Google Analytics or other analytics platforms.
>
> For example, an analytics platform using a cross-channel last-click model may attribute the transaction above to another channel, while KST attributes it to Kelkoo Group.
>
> These differences do not necessarily indicate a tracking issue; they simply result from different attribution methodologies.

## Conversion window

The KST conversion window is **30 days**.

A transaction can therefore be attributed to Kelkoo Group when it occurs within 30 days of a qualifying Kelkoo click.

After the 30-day period has expired, that click is no longer considered for attribution.

If another Kelkoo click occurs during the conversion window, the most recent qualifying Kelkoo click is used.

For more information about differences between KST and analytics platforms, see [Understanding Differences Between KelkooGroup Reported Clicks in Google Analytics 4](https://docs.kelkoogroup.com/for-advertisers/how-to-use-your-analytics-platform-to-track-kelkoo-group-traffic/understanding-differences-between-kelkoogroup-reported-clicks-and-your-analytics-data#Understanding-Differences-Between-KelkooGroup-Reported-Clicks-in-Google-Analytics-4).

## FAQs

**Tag Loading: Does your technology require the tags to be loaded only once for SPAs, or should they fire with each new virtual page view?**

Our lead tag is used to store the user id from the kk query parameter to a first party cookie. The goal of this is the correct attribution and measurement of the sales. It need to be loaded only once.

**Performance: We've noticed that the tags inject into the head section with each virtual page load, potentially affecting site performance. Do you have guidelines for minimizing this impact?**

The tag does indeed load a pixel asynchronously as a fallback to store the user id. As this is asynchronous this does not impact site performance.

**Optimization: Are there specific measures or best practices you recommend for ensuring accurate and optimized tracking for SPAs? Additionally, are any changes or alterations to pixel codes necessary for SPA compatibility?**

There is no optimization needed for SPAs, as we don't track the individual pages of products viewed by the end user. We do not use this tag for retargeting purpose.

---
language: "en"
---
# Merchant Center

* [Start with your Merchant Center](https://docs.kelkoogroup.com/for-advertisers/merchant-center/start-with-your-merchant-center.md)
* [Use your statistics](https://docs.kelkoogroup.com/for-advertisers/merchant-center/use-your-statistics.md)
* [Merchant Center - FAQ](https://docs.kelkoogroup.com/for-advertisers/merchant-center/merchant-center-faq.md)

---
language: "en"
---
# Merchant Center - FAQ

## Everytime I connect to my merchant center, I need to reset my password. What can I do ?

The most common reason is that your are not using a wrong login/password combination.

* \*\* As you can have multiple logins attached to the same email, it's important that you always select the correct login before entering your password.\*\*

* If you wish to get a single login for all your accounts, please contact your account manager.\*

* Another reason might be that you are using a password manager and that you don't update the password when you reset it.

## How to reset your password

![resetpassword.png](https://docs.kelkoogroup.com/__attachments/a_f3ef6a68f53c44c226547d13ffd4d42e15f0ba1523f74d01f386b97d1ca983c5/resetpassword.png?cb=c7dd7df9b0bac4c2d26ea5c210c79e0f)

* Click on *Forgot your password* on the login page

* Enter the email address attached to your Kelkoo Group account

* Click on *Send me a link to reset my password*

* You should receive shortly an email in your inbox (from a \*@kelkoogroup.com address). Please check your Spam folder if you don't receive anything.

![resetpassword_email.png](https://docs.kelkoogroup.com/__attachments/a_08c47cccf60dbfdb5d8af6371069c1d93f1f846c88a7c131357e28edeb67636c/resetpassword_email.png?cb=1892b6c8ffb4a2139909735868e8d7f0)

*This email is only valid for 30 minutes and can only be used once. If you got an error when clicking on the link, please restart the procedure.*

* You are redirected to a page to reset your password

* \*\* IMPORTANT! As you can have multiple logins attached to your email, you need to select first the login for which you want to reset\*\*

* Enter a password that respect our format:

*The password should be between 8 and 16 characters long, contain at least 1 lowercase letter, 1 uppercase letter, 1 digit and 1 special character #?!@$%\^\&\*- Other special characters are not accepted. The dot is not accepted*  
![resetpassword_redirect.png](https://docs.kelkoogroup.com/__attachments/a_1d36121c611645d0f128bafc377427186c0cf3ea2f663502881ffaa362943297/resetpassword_redirect.png?cb=a15e65c49dc0d5d8889226598bd73c69)

---
language: "en"
---
# Start with your Merchant Center

## Need help ?

You have direct access to our documentation by clicking on the *Need Help?* button at the top right

## Campaigns

### Campaign Selector

If you have multiple campaigns with Kelkoo Group, you can select them via the dropdown located in the main menu  
![campaignselector.png](https://docs.kelkoogroup.com/__attachments/a_e5134958fe7b99c1d64c11ea139c634a960e0a8572a72c0e959e38fcd065dfdf/campaignselector.png?cb=69b10c80427af540ed28b4f040b6a66a)

### Dashboard

When you have selected your campaign, the dashboard will display key metrics for the current month.

**Campaign budget:**

* Budget spent split by device type

* Budget spent vs Cap, so you know if you need to increase your budget to stay online

![dashboard_budget.png](https://docs.kelkoogroup.com/__attachments/a_6ccb1b41330358f2d7dce38e7c923ee460f48a5a138f23157175fe1561dcad77/dashboard_budget.png?cb=0542fc7b40634d7f86d5bca900719db8)

**Campaign metrics (split by device type)**

* Number of clicks

* Number of sales

* Sales amount

![dashboard_metrics.png](https://docs.kelkoogroup.com/__attachments/a_0c2de2edfc172c79cf894f5c0fb3d2325c5cab9802eb60ac5c3e4ba78ebb2d58/dashboard_metrics.png?cb=cc47bc54367b2afd68641a8093bb0e8a)

You will also find the status of your Kelkoo Sales Tracking  
![dashboard_KST.png](https://docs.kelkoogroup.com/__attachments/a_ca7f9905568aa075b104b28192d679271fc59bbe4dbd3aa44e2352a7aa33aaeb/dashboard_KST.png?cb=0370b194d923f148eec60f39ebedf817)

**Account manager \& Invoices**

On the right side of the screen, you can find a contact form to talk with your account manager and the status of your invoices.  
![dashboard_others.png](https://docs.kelkoogroup.com/__attachments/a_c23e34914491161157a9f6e8f2c8fca8106042abba03d7c93ffaa328b7e71d65/dashboard_others.png?cb=57511b7d165de054123eb713d8cdfdd6)

### Campaign settings

In this section you can find the following information:

* Contract information with start date

* Store information: name, url, logo and description that is used to display your offers on our network. You also have a direct link to check your offers on our Kelkoo website.

* Quick budget increase: current budget of the campaign, and if made available by your account manager, you can increase this cap at your convenience:

![campaignsettings1.png](https://docs.kelkoogroup.com/__attachments/a_d3d62ed9cc14e115e25acac32c8c397fdc2986729d3b88c8a6b18b0abb37972b/campaignsettings1.png?cb=d5cde2c03616348b7128d5ad3a93ba26)

* Optimize CPC bids: after accepting the terms and conditions, you will be able to adapt your CPC rate card according to your need.

![campaignsettings2.png](https://docs.kelkoogroup.com/__attachments/a_689791a1ddbaca317721478ed28a8ac4ce1924418600a0f2abbc84c3c0d000fe/campaignsettings2.png?cb=2ac97272b486f411402741fdef729d1d)

### Statistics

See How to read your Statistics.

### Kelkoo Sales Tracking

See [Kelkoo Sales Tracking Installation tool](https://developers.kelkoogroup.com/app/documentation/navigate/_merchant/salesTrackingWS/_/_Installation/TestIntegration).

## Account

### Account information

This information is used for credit check purposes and billing. If you need to update, please contact your account manager.  
![account_companyinfo.png](https://docs.kelkoogroup.com/__attachments/a_48fe9360cc7db11329cf6e2bb153850a091d3265cd75254cfacfa4a784aeb69b/account_companyinfo.png?cb=d077ce6a8594e8e378ae63109bbcc50d)

### Users

At the moment, only one user can be connected to a specific campaign. A single user can be connected to multiple campaigns. You can change user information and password, but if you need to create a new user, please contact your account manager.  
![account_user.png](https://docs.kelkoogroup.com/__attachments/a_122a49817e0f97297dac4b6201f57c39b83b1234fe872f5ad38a5438f5b496b1/account_user.png?cb=5d648b735a946bbef7acc9ec8a818dec)

### Billing

This information is used for billing purposes. If you need to update, please contact your account manager.  
![account_billing.png](https://docs.kelkoogroup.com/__attachments/a_47878a5ae638eb096e722389477a7e34a886416549acd663c461dad3fa7c29ec/account_billing.png?cb=5123b986bc34ceb27328f33152df760e)

### Invoices

You can download here your invoices.  
![account_invoicing.png](https://docs.kelkoogroup.com/__attachments/a_b57047a1fd78bce05f0b6ddaaa958829bb18d752d38fe89cde2029942e254bf1/account_invoicing.png?cb=7767e91bcce2efe602150cbe40a7a0c5)

---
language: "en"
---
# Use your statistics

Your Statistics interface is divided in 5 sections:

* Global Trend: this give you an overview of the evolution of your campaigns key KPIs

* Detailed View: this helps you get a better understanding of what's happening at Category and Offer levels.

* Data export: Raw data exports are available in CSV and XLS format on this page.

* API Credentials: You can generate the token needed to access your statistics via API on this page

* Automatic Reports: Schedule automatic summary reports to be sent via email

## Important note

Data discrepancies can sometimes arise between our Kelkoo Sales Tracking reporting and other tools such as Google Analytics. These discrepancies can be caused by a variety of factors among which bad tag setup or different conversion windows, filtering rules and attribution models between tools. Kelkoo Sales Tracking is a tracking with visibility on Kelkoo traffic only, with a conversion window of 30 days. All users clicking on a KelkooGroup ads and buying one of your product within 30 days will be counted as a conversion.

For more information, please read [How to use your analytics tool to track Kelkoo Group traffic and performance](https://developers.kelkoogroup.com/app/documentation/navigate/_merchant/merchantSystems/_/_/GoogleAnalytics)

## Metrics selection

You can get the view your want with the available selectors:

* Period of time: Custom or predefined periods

* Device: All devices / Desktop / Mobile (*Note: Tablet traffic is aggregated with Desktop*)

* Category: All categories / Single category (*Note: Those are Kelkoo Group own categories. Please referts to the CPC Rate Card section of the Campaign Settings page to get the full list*)

## Global Trend

![stats_globaltrend.png](https://docs.kelkoogroup.com/__attachments/a_0eb7b84dfb508e849e97b605a9fa6c3f59b776aa7419916bf14898a4cc0b79f3/stats_globaltrend.png?cb=77040a7102987e06920f904ada15dd89)

On this view, you can follow the daily evolution of your campaigns key KPI:

* Clicks: number of times your offers have been **clicked** on the Kelkoo network for the day selected. This is not the number of session usually reported by tools such as Google Analytics.

* Cost: cost of the clicks you receive from Kelkoo calculated as *CPC \* number of clicks*

* CPC: the fee charged each time an offer is clicked by a user in the Kelkoo Network (If you average value based on click on desktop and mobile devices)

* Number of sales: number of orders you made on your website thanks to Kelkoo traffic (See important note above)

* Order value: revenues generated from the traffic Kelkoo is sending

* CR: Ratio in % between the number of orders and number of clicks

* COS: cost of the clicks generated by Kelkoo divided by the revenues generated from the traffic Kelkoo is sending

* ROAS: Ratio between Sales revenue generated by a Campaign and its Cost. Opposite of COS.

* CPO: cost of the clicks generated by Kelkoo divided by the number orders you made thanks to the Kelkoo traffic

* Average Cart: ratio between revenues generated from Kelkoo traffic and the number of orders

## Detailed View

![stats_detailedview2.png](https://docs.kelkoogroup.com/__attachments/a_52808e34000467fa77939bb9ecd2d2451b1887707fc0340d8ae2171e5693efba/stats_detailedview2.png?cb=4b042975c0d5b4a69829e37b20da64c7)

In this section, you can follow your campaign KPIs by category or offer on the time period of your choice.

### Categories view

![stats_categoryview.png](https://docs.kelkoogroup.com/__attachments/a_e2a360a3131c4f1d6751cb565a4474c5f89b7998398b27556e640b2616de1b70/stats_categoryview.png?cb=bcaa26395682828f5f8693963333e196)

In this section, you can get the key KPIs of your campaigns agregated by offer categories, based on Kelkoo Category tree. Those are the Kelkoo categories attributed to each of your offer during onboarding. Sales-related statistics are aggregated on the offer categories where the lead has been generated. Offer clicked can be different than the items present in the order basket.

### Offer Clicked view

![stats_productview.png](https://docs.kelkoogroup.com/__attachments/a_b2fbfa8f5f2a360218dcb864f25a7a02112efeeffa6201ce1df91b77e79cd157/stats_productview.png?cb=9a8fb0b9b6c1582488af6765a506ea17)

In this section, you can get the list of your offer with key KPIs related to the sales they generated. You can find here statistics aggregated by offers. All offers from your feed are listed here, with relevant statistics. Sales-related statistics are aggregated on the offer where the lead has been generated. Offer clicked can be different than the items present in the order basket.

### Sales view

![stats_saleview.png](https://docs.kelkoogroup.com/__attachments/a_a4d6ba2d06e899571a86b3c785b5b467a3aff30c36fbc9bfe4c6352e90082290/stats_saleview.png?cb=03cbe5399e6542419862a4f6acf6e910)

In this section, you can get the full list of Sales we've registered for your campaign (sales registered and consolidated by our internal system). Each transaction is attached to the lead that has generated the sale.

You can click on the basket icons to get the list of items purchased in this sale.

### Purchased items view

![stats_purchaseditemsview.png](https://docs.kelkoogroup.com/__attachments/a_68390f28eeedc6f417b7aaea2e7f4c85f5d9290c27e8a0e4892a02e0d6608a95/stats_purchaseditemsview.png?cb=cbb9acc0090041971d30501ff0b8eee3)

In this section, you can get the full list of products purchased on sales we've registered for your campaign (sales registered and consolidated by our internal system). This is the content of the basket you sent us via our Sales Tracking solution, so this table is filled only if the data is sent to us.

## Data Export

* Download CSV raw data or XLS templated data on the time period of your choice

## API Credentials

see [Merchant Statistics API](https://developers.kelkoogroup.com/app/documentation/navigate/_merchant/merchantStatistics/_/_/Overview) for more details.

## Automatic Reports

![stats_autoreports.png](https://docs.kelkoogroup.com/__attachments/a_93bce0145956758a2c47b48ada1b83be9a897f388819e28ece4ead4c37ff5317/stats_autoreports.png?cb=7a897256c5a7ddd80ccb616aa75c2081)

* You can register email to send performance email on a regular basis: Daily, Monthly or Weekly.

* Those emails give you a summary view of your different campaigns

![performanceemail.png](https://docs.kelkoogroup.com/__attachments/a_1df2f4aca6739be0f6e427ec4f1b273bec64bd4b788aefcde818423a130e1b0a/performanceemail.png?cb=ab021a7803a5a21f5c69c9f4003a652c)

**Important: the data is always from the 1st day of the current month until the day before the sent date**

* Those emails are sent in the morning. Time may vary depending on our internal processes.

---
language: "en"
---
# Merchant Statistics API

Kelkoo Group provides Statistics to follow the performance of your campaigns. Those statistics can be accessed via your *Merchant Extranet* or programmatically via an API.

The following pages describes how to use this Statistic API.

Alternatively, if you use one of the following Marketing Data aggregators, native connectors are available.  

|               Platform                |                   Link to connector documentation                   |
|---------------------------------------|---------------------------------------------------------------------|
| [Funnel.io](https://funnel.io/)       | <https://funnel.io/data-sources>                                    |
| [Wizaly](https://www.wizaly.fr/)      | <https://helpdesk.wizaly.com/projects/documentation2/wiki/Kelkoo>   |
| [Adverity](https://www.adverity.com/) | <https://www.adverity.com/data-connectors/retail/kelkoo-group-api/> |

*Important Note: When requesting data for the previous day, it is possible that the data compilation process is not complete yet. In that case, please retry later to obtain the requested data.*

* [Merchant statistics - Resources](https://docs.kelkoogroup.com/for-advertisers/merchant-statistics-api/merchant-statistics-resources.md)
* [Merchant statistics - Authentication](https://docs.kelkoogroup.com/for-advertisers/merchant-statistics-api/merchant-statistics-authentication.md)
* [Merchant statistics - Tokens](https://docs.kelkoogroup.com/for-advertisers/merchant-statistics-api/merchant-statistics-tokens.md)

---
language: "en"
---
# Merchant statistics - Authentication

*Note: All current endpoints are using JWT authentication.*

Merchant Statistics URLs must be authenticated using a **JSON Web Token** (JWT).

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. Read more about it on [jwt.io](https://jwt.io/).

## Generate a token

The first thing to do is to generate a token on the Merchant Extranet.

Check out the generate token guide.

**Important:** this token must be kept secret, especially it must never be used from Javascript client-side code.

## Use the token in your requests

Once you have a token, you just need to provide it in the `Authorization` HTTP header of your requests:

    Authorization: Bearer <token>

### cURL

For instance, using cURL it would like this:

    TOKEN="<your-token>"
    curl -H "Authorization: Bearer ${TOKEN}" https://api.kelkoogroup.com/...

### Other languages

All major languages and libraries or framework support JWT authentication (or at least sending a header with a request).

Check out your HTTP library documentation to find out how.

---
language: "en"
---
# Merchant statistics - Resources

*mportant Note: When requesting data for the previous day, it is possible that the data compilation process is not complete yet. In that case, please retry later to obtain the requested data.*

The base URL is: `https://api.kelkoogroup.net/merchant/statistics/v1`

All resources must be authenticated using a **JSON Web Token** (JWT). See JWT Guide

## Resources

### `/my-campaigns`

This resource will return a list of campaign containing an id (internal identifier of a campaign), a name, a country and a website url
JSON

    [{
      "campaignId": 1000000000,
      "campaignName": "Example.fr",
      "websiteUrl": "http://www.example.fr",
      "country": "fr"
    }, {
      "campaignId": 1000000001,
      "campaignName": "Sample.co.uk",
      "websiteUrl": "http://www.sample.co.uk",
      "country": "uk"
    }]

### `/category/{campaignId}?startDate={startDate}&endDate={endDate}`

This resource will return the clicks registered at this campaign id in the range (startDate to endDate both included).

The values will be formatted as following: (this is an example)
JSON

    [
      {
        "campaignId": 1000000000,
        "date": "2021-03-15",
        "catId": 100305123,
        "catName": "Games",
        "deviceType": "Mobile",
        "currency": "EUR",
        "clicks": 7,
        "cost": 1.3566,
        "sales": 2,
        "orderValue": 58.91,
        "trackedLeads": 7,
        "costTrackedLeads": 1.3566
      }
    ]

An object is grouping all clicks made for one day (date), one category (catId with the name catName) and one device (deviceType)

*Fields sales, orderValue, trackedLeads and costTrackedLeads will only be filled if Kelkoo Sales Tracking is activated.*

### `/product/{campaignId}?startDate={startDate}&endDate={endDate}`

This resource will return the clicks registered at this campaign id in the range (startDate to endDate both included).

The values will be formatted as following: (this is an example)
JSON

    [
      {
        "campaignId": 1000000000,
        "date": "2021-03-15",
        "catId": 100305123,
        "catName": "Games",
        "deviceType": "Mobile",
        "currency": "EUR",
        "clicks": 7,
        "cost": 1.3566,
        "sales": 2,
        "orderValue": 58.91,
        "trackedLeads": 7,
        "costTrackedLeads": 1.3566,
        "offerTitle": "Playing cards",
        "productUrl": "http://my-site.com/playing-cards.html",
        "offerOnSale": 0
      }
    ]

An object is grouping all clicks made for one day (date), one category (catId with the name catName) and one device (deviceType) on one product

*Fields sales, orderValue, trackedLeads and costTrackedLeads will only be filled if Kelkoo Sales Tracking is activated.*

### `/sales/{campaignId}?startDate={startDate}&endDate={endDate}`

This resource will return the sales registered at this campaign id in the range (startDate to endDate both included).

The values will be formatted as following: (this is an example)
JSON

    [
      {
        "campaignId": 1000000000,
        "orderId": "1",
        "leadId": "dc1.kelkoo.net_1657737217631_6186757",
        "categoryId": 137701,
        "localCurrency": "EUR",
        "productUrl": "https://track.io/siteid-471007",
        "offerTitle": "iPhone X",
        "deviceType": "Computer",
        "localOrderValue": 0,
        "saleIsClosed": false,
        "saleDate": "2022-06-22 10:10:22",
        "lastRecordDate": "2022-06-24",
        "leadDate": "2022-06-02 10:10:22",
        "sessionDuration":1728000000,
        "orderBasket": [
          {
            "name": "Longue robe",
            "price": 19.9,
            "quantity": 1,
            "sku": "1518007"
          }
        ]    
      }
    ]

Only 2 years of data can be retrieved from today.

---
language: "en"
---
# Merchant statistics - Tokens

## Managing Tokens

In order to access the Kelkoo Group Merchant API you must have a token. You can generate these from the credentials page from the left menu of your account.

Additional tokens can be generated if login is associated to multiple persons.

A token is linked to a login. It provides access to all campaigns linked managed by this login.

Tokens are in the form of [JWT](https://en.wikipedia.org/wiki/JSON_Web_Token), JWT is a standard technology used to authenticate the access to resources. It allows to:

* enhance security by signature verification

* grant access to resources

* identify who access the resource

### How to generate token

In the left menu click in API Credentials to access to management page (see image below)  
![MerchantExtranet_JWTGeneration_TokenCreation_1.png](https://docs.kelkoogroup.com/__attachments/a_c90e64904401623fb5ff0d9f51b5f5a4578de8eb53cf977e9bd39c0b430d4cc2/MerchantExtranet_JWTGeneration_TokenCreation_1.png?cb=38cf52f77f5641bc039f999500e68fa8)

Then click in `Create new token` and the following screen should appear to create your token in 3 steps  
![MerchantExtranet_JWTGeneration_TokenCreation_2.png](https://docs.kelkoogroup.com/__attachments/a_def5512fed4651d47aefc061efafbe4fd145d1f9f7bd3b6239658f7960f35828/MerchantExtranet_JWTGeneration_TokenCreation_2.png?cb=14a0118be04c606b158cf3759213b622)

Fill `Token name` and click in `Create token`

The token is now created and JWT is displayed in step 2  
![MerchantExtranet_JWTGeneration_TokenCreation_3.png](https://docs.kelkoogroup.com/__attachments/a_577782baaea0bf8600fd7f056c97780841df7e6f40a5306f4dd2b6c0aec69c91/MerchantExtranet_JWTGeneration_TokenCreation_3.png?cb=f42f652aa7e0e864c0fa191bbdb107ac)

Click in `Copy to clipboard` to copy your JWT and reach step 3  
![MerchantExtranet_JWTGeneration_TokenCreation_4.png](https://docs.kelkoogroup.com/__attachments/a_3353489ae98607917cee4cf16187d9c2afb23dd0d6edd871843972d23cadd8ea/MerchantExtranet_JWTGeneration_TokenCreation_4.png?cb=e7e7f83e04b43053908eb6e1b9b5dc65)

The generated token is not stored in our systems, however we're able to verify its authenticity. As it is not stored, it is important for you to copy the generated token, and save it in a secure place before navigating outside the current page. If token is lost or stolen, you should revoke it immediately to avoid misuse.

Click on `Finished` to return to main page where you can see your new token.  
![MerchantExtranet_JWTGeneration_TokenCreation_5.png](https://docs.kelkoogroup.com/__attachments/a_142438ae9a1c9d48240b92b0b8949647745397c250ecb4f849b8c50ad4b01ddc/MerchantExtranet_JWTGeneration_TokenCreation_5.png?cb=fa3996dae9c7bfacb418d855e9a05098)

To revoke permanently a token, click in the `revoke` red button. This action is not reversible

To pause a token, click in the `pause` orange button. This action is reversible by clicking the `play` button for the token.

### How to use the token

For details of how to use the generated token please see [JWT Guide](https://docs.kelkoogroup.com/for-advertisers/merchant-statistics-api/merchant-statistics-authentication.md).

---
language: "en"
---
# Product data

* [Product data feed](https://docs.kelkoogroup.com/for-advertisers/product-data/product-data-feed.md)
* [Product data specifications](https://docs.kelkoogroup.com/for-advertisers/product-data/product-data-specifications.md)
* [Crossed Prices and Sales](https://docs.kelkoogroup.com/for-advertisers/product-data/crossed-prices-and-sales.md)
* [How to upload your feed to Kelkoo Group FTP server](https://docs.kelkoogroup.com/for-advertisers/product-data/how-to-upload-your-feed-to-kelkoo-group-ftp-server.md)
* [Product data feed - FAQ](https://docs.kelkoogroup.com/for-advertisers/product-data/product-data-feed-faq.md)
* [Feed Plugin Suggestions](https://docs.kelkoogroup.com/for-advertisers/product-data/feed-plugin-suggestions.md)

---
language: "en"
---
# Crossed Prices and Sales

## How to display Crossed prices on Kelkoo Group ?

* Fill in the fields price-no-rebate (the percentage reduction will be calculate for you).

* Update the price field with the final price (ie the price including discount).

* Refer to the section 'crossed Price / Sales' page Main fields for details.

## How to display Sales on Kelkoo Group ?

* Fill in the fields-no-rebate price and percentage-promo (if you cannot calculate the percentage reduction leave this field empty and Kelkoo Group will calculate it for you).

* Update the price field with the final price (ie the price including discount).

* Put the value 1 in the field occasion.

**For France**, for the 2026 summer sales, we would like to inform you that in order to comply with the legislation which only authorises the display of discounted offers from 24 June at 8am, we will cut off all our updates between 23 june at 3pm and 24 June at 8am. You will therefore be able to make your discounted feed available during this period, but the offers will only appear on Kelkoo Group on 24 June at 8am.

---
language: "en"
---
# Feed Plugin Suggestions

To help merchants generate a feed and onboard Kelkoo, we suggest some plugins that are available in the market and are free of cost.

* [PrestaShop Plugin for Feed](https://docs.kelkoogroup.com/for-advertisers/product-data/feed-plugin-suggestions/prestashop-plugin-for-feed.md)

* [WordPress Plugin for Feed](https://docs.kelkoogroup.com/for-advertisers/product-data/feed-plugin-suggestions/wordpress-plugin-for-feed.md)

* [UNAS Plugin for Feed](https://docs.kelkoogroup.com/for-advertisers/product-data/feed-plugin-suggestions/unas-plugin-for-feed.md)

---
language: "en"
---
# PrestaShop Plugin for Feed

## How to Install \& Set Up the Product Feed Plugin

Follow these steps to install the free Kelkoo Product Feed plugin on your PrestaShop store and share your feed URL with your Account Manager.

### Step 1: Download the ZIP file

Click the link below to download the plugin. Save the `productfeed_v1.5.5.zip` file to your computer --- do not unzip it.

[https://kelkoogroup-documentation.atlassian.net/wiki/download/attachments/114065411/productfeed_v1.5.5.zip](https://docs.kelkoogroup.com/__attachments/a_3fcd83a3a037dad7b2a4758b15622986df11986c80f160629eec8c7fa0724940/productfeed_v1.5.5.zip.md?cb=910f88ce6fc7d8383f2cca2e6dab7406)

### Step 2: Log in to PrestaShop and navigate to Modules

In the left sidebar, navigate to **Personalize** → **Modules** → **Modules and Services**.

### Step 3: Click "Upload a Module" in the top-right corner

On the Module Manager page, click the **Upload a Module** button in the top-right corner.  
![41512c_ea0696_Screen_shot_1783071260993-20260703-093442.png](https://docs.kelkoogroup.com/__attachments/a_5bd6775c9a88c5b5f0de6d3b3aff13165d8a786f82e3b5453d345cda5cc070db/41512c_ea0696_Screen_shot_1783071260993-20260703-093442.png?cb=0399d20a0905218a684c493491c6ddcd)

### Step 4: A pop-up window will appear --- drag and drop the ZIP file

An upload dialog will open. Drag the `productfeed_v1.5.5.zip` file from your computer into the dashed area, or click **"select the file"** to browse. PrestaShop will install the module automatically.  
![624696_Screen_shot_1783071296945-20260703-093457.png](https://docs.kelkoogroup.com/__attachments/a_e7d965d1d32811dba1d21492d87f237a5b5d1562ce49a5e5d8fe26f85a9c1e3f/624696_Screen_shot_1783071296945-20260703-093457.png?cb=d2d0379fb5eaaf8a2bec479c9b25df39)

### Step 5: Find the Kelkoo Product Feed and click "Configure"

After installation, find **Kelkoo Product Feed** in the installed modules list and click the **Configure** button on the right.  
![1ac2f5_Screen_shot_1783071319729-20260703-093522.png](https://docs.kelkoogroup.com/__attachments/a_a9a0eea4f6e2113cb2a6c08fd1cb4e905be8767958b3e32071a6ae71dd6a5d54/1ac2f5_Screen_shot_1783071319729-20260703-093522.png?cb=84562a623238b56ee357e1c8ebeddd4f)

### Step 6: Generate the feed and copy your feed URL

On the configuration page, click **Refresh Feed Now** to generate the feed, then click **Copy URL** to copy your unique feed URL. Send this URL to your Kelkoo Account Manager.  
![4d7967_Screen_shot_1783075240892-20260703-104042.png](https://docs.kelkoogroup.com/__attachments/a_04569458c4c9cb90c15669b9d0f2b11a46964a31554c4ec82edd8f0f962ad624/4d7967_Screen_shot_1783075240892-20260703-104042.png?cb=5312dd59ff567f112ab0488a7a7d0bd0)  
**Note:** The feed updates automatically every 24 hours. Click "Refresh Feed Now" only when you need an immediate update --- for example, after adding new products or changing prices.

---
language: "en"
---
# UNAS Plugin for Feed

This plugin lets you generate a product feed on UNAS Ecommerce. Follow the steps below to install and configure it, then share your feed URL with your Kelkoo Account Manager.

## How to generate feed using the Plugin

### Step 1: Navigate to External Marketing Systems

Log in to your UNAS dashboard, then navigate to **External Marketing Systems** through the **Marketing** tab.  
![Screenshot 2026-07-08 115844.png](https://docs.kelkoogroup.com/__attachments/a_8e5d75a7e17869d7fbc47fc713c9b2a70a1eca360106b906393c3380fec470c5/Screenshot%202026-07-08%20115844.png?cb=f186b42db25dc2bdb4f2ba97e8970641)

### Step 2 and 3: Search by Kelkoo Group and Click on Add

In the search bar, type **Kelkoo Group** . Once it appears in the results, click **Add** to add it to your marketing systems.  
![Screenshot 2026-07-08 121704.png](https://docs.kelkoogroup.com/__attachments/a_a0a6d93b19767fa56fb657301e0350ab7bd9ae6dce4a31ee909cd6bbc5e954f2/Screenshot%202026-07-08%20121704.png?cb=93bc83d18b8544bc18d84e5026878cca)

### Step 4: Enable the Kelkoo Integration

Once it's ready, copy the Feed URL and share it with your Kelkoo Account Manager.  
![Screenshot 2026-07-08 155133.png](https://docs.kelkoogroup.com/__attachments/a_24e45be6b2702678bb63202cf2b034ab9cd27918365b1336fdc67a757bb966a6/Screenshot%202026-07-08%20155133.png?cb=dec956549cbc1f0cc8d557240a409e49)

### Step 5: Save your changes

![Screenshot 2026-07-08 160206.png](https://docs.kelkoogroup.com/__attachments/a_fb761d26f639fbbac08128f9629718e28667a3ca71a875e569d0f0811d4ed6bf/Screenshot%202026-07-08%20160206.png?cb=d501282e2f345c65590d39fbf5d0ae3d)

### Next step: Install Kelkoo Sales Tracking

<https://docs.kelkoogroup.com/for-advertisers/kelkoo-sales-tracking/installation-methods/installation-guides-for-ecommerce-platforms/unas-ecommerce>

---
language: "en"
---
# WordPress Plugin for Feed

This plugin lets you generate a product feed on WordPress. Follow the steps below to install and configure it, then share your feed URL with your Kelkoo Account Manager.

## How to Install \& Set Up the Product Feed Plugin

### Step 1: Log in to WordPress and navigate to Plugins

Log in to your WordPress account. In the left sidebar, click **Plugins** → **Add Plugin**.  
![4a8a1e_Screen_shot_1783430474134-20260707-132115.png](https://docs.kelkoogroup.com/__attachments/a_03fe7b60ce707fcca7cd2e1d30fc0869fccf934bdaf610c237e2da9da51cf20a/4a8a1e_Screen_shot_1783430474134-20260707-132115.png?cb=cff6d3f799de333a9a69c489eb84febe)

### Step 2: Search for and install the Adtribe plugin

Search for **Adtribe** and install the plugin named **"Product Feed Pro for WooCommerce by Adtribe"**.  
![e2089f_Screen_shot_1783430585078-20260707-132307.png](https://docs.kelkoogroup.com/__attachments/a_68f8e33f8f5c65d7f5d4230aeb7fcffd8f385abaaadf5828ead109abeee00443/e2089f_Screen_shot_1783430585078-20260707-132307.png?cb=1bb3a4d6efa7a04dd0adb534e7a7606e)

### Step 3: Create a new feed

Once the plugin is installed, look for **Product Feed** in the left sidebar and click **Create Feed**.  
![72cdf7_Screen_shot_1783430626919-20260707-132347.png](https://docs.kelkoogroup.com/__attachments/a_dc5e10ce4ffb28e914dbb055e4d4effa5668f0aa7e12ab80a842701296f72c38/72cdf7_Screen_shot_1783430626919-20260707-132347.png?cb=9c20a7063aac9cb8137e122d036bdb9d)

### Step 4: Configure the General section

In the **General** section, name the project whatever you like and select the country for your feed. Make sure the **Include Product Variations** option is enabled and the **Refresh interval** is set to **Daily**.

Click **Save and Continue**.  
![a7774f_image-20260707-133357.png](https://docs.kelkoogroup.com/__attachments/a_73750ef567cbea38d4cb7861f33ca86032a8277235ad92c0e02d4af6dd57d924/a7774f_image-20260707-133357.png?cb=dcb2d2c81b1108c1028d703a0e5449cb)

### Step 5: Review the field mapping

In the **Field Mapping** section, most fields should be mapped automatically. Fill in the correct values for any unmapped fields, then click **Save and Continue**.  
![64dbd3_image-20260707-133737.png](https://docs.kelkoogroup.com/__attachments/a_cf99323b4d11ee2d6bbb125530c3434f440a1ae9caa24d05e543efb0562ba102/64dbd3_image-20260707-133737.png?cb=14664c452935e408a0d706117664173a)

### Step 6: Skip to Conversion \& Google Analytics

You can skip all the other sections and go directly to **Conversion \& Google Analytics**.

### Step 7: Set UTM parameters and generate the feed

In **Conversion \& Google Analytics** , add any specific UTM parameters you need. If you don't need any, disable the UTM parameter option. Then click **Generate Product Feed**.  
![324725_image-20260707-134039.png](https://docs.kelkoogroup.com/__attachments/a_59053ecd0c29e4d3266c15a8c21689497e4931c3ce71ea6f6873a750157e382c/324725_image-20260707-134039.png?cb=633642a3932d2aef05ffac226e643df4)

### Step 8: Copy and share your feed URL

The feed takes around 5--10 minutes to generate. Once it's ready, copy the Feed URL and share it with your Kelkoo Account Manager.  
![8ddb67_Screen_shot_1783431673919-20260707-134114.png](https://docs.kelkoogroup.com/__attachments/a_d5892d9528691f1575fb7fc879fee392e3ae4d09a0c2f57f10d805fce87afc74/8ddb67_Screen_shot_1783431673919-20260707-134114.png?cb=a73cecc6f8ddeef380ea301a4d2b611c)

---
language: "en"
---
# How to upload your feed to Kelkoo Group FTP server

## Before you begin

Refer to Product data feed to setup your feed for Kelkoo Group.

This page will guide you to upload your feed to the Kelkoo Group FTP server. This option is set up on request.

## How to get access to Kelkoo Group FTP server

Contact your Kelkoo Group account manager to get access to the Kelkoo Group FTP server.

Once you have requested a Kelkoo Group FTP account, you will be sent your login details which will comprise the following:

* **Server:** [ftpkelkoo.kelkoo.net](http://ftpkelkoo.kelkoo.net/)

* **Username:**

* **Password:**

Please ensure your file name remains the same each time you upload the feed otherwise our systems will not be able to pickup the feed.

We suggest naming your feed file without any dates. e.g `kelkoo.xml`, `kelkoo.txt`

## How to upload a feed using Windows File Explorer

* Using Windows operating system, open a File Explorer window (Windows key + E) and type the FTP address ( `ftp://ftpkelkoo.kelkoo.net` ) in the file path at the top and press Enter.

* When prompted, enter the username and password into the prompt window. You can save the password and the login settings to help with future logins.

* Depending on the home directory, you may be presented with 3 directories, if so you need to be in the 'pub' directory.

* You can now simply drag and drop or copy/paste your feed into the file explorer window to upload.

* The feed has now been uploaded successfully to your FTP account and you can inform your Kelkoo Group account manager or technical contact.

![windows10_log_on_as.png](https://docs.kelkoogroup.com/__attachments/a_f8987bee2d9fd8f90d216df0ee26db718505664de6a1270a7a26c627ac53c307/windows10_log_on_as.png?cb=3519e10b8c28a398faef659eba04d68e)

## How to upload a feed using a FTP client

A FTP Client is a software designed to transfer files back-and-forth between a computer and a server over the Internet. There are many free FTP clients available to download such as FileZilla and they all work in a similar way.

* Open FileZilla

* To connect to the Kelkoo Group FTP server, enter host,username, password

  * **Host:** [ftpkelkoo.kelkoo.net](http://ftpkelkoo.kelkoo.net/)

  * **Username:** provided by Kelkoo

  * **Password:** provided by Kelkoo

* Click on "Quickconnect"

![feedupload2.png](https://docs.kelkoogroup.com/__attachments/a_1ef5ebf1998f3de294b73611a2a0304ba88e3bc560b48c15daa8a1e76a877498/feedupload2.png?cb=eb69371577429a2a618a2cbbc67efb65)

* If you receive a "Unknown certificate" message, click "OK". If not, continue.

* You should now be connected to your Kelkoo Group FTP account.

* Under "Local site", locate your feed and simply drag it under the "Remote site" window to upload it.

* Once the feed is uploaded, inform your Kelkoo Group account manager or technical contact.

![feedupload3.jpg](https://docs.kelkoogroup.com/__attachments/a_2b29488eb4babd8785cbcebe53d24eca4ef4ad486b43bb1cb1a7cd9dc5e8c1ae/feedupload3.jpg?cb=34879f0d2af4a3075b88c40b3b13de3f)

## Troubleshooting

### I receive an error "530 Login authentication failed"

* Ensure you are using the correct login details provided by Kelkoo Group. Note that passwords are case-sensitive.

* Check your internet connection and that you are allowed to use port 21.

### I receive an error "ECONNREFUSED -- Connection refused by server"

* You may receive this error if you are using incorrect FTP port number. The FTP port number that you should use is 21.

### My feed has been uploaded but Kelkoo Group is unable to see it

* Please ensure the feed has been uploaded into the "pub" directory.

* When you connect to your FTP account and do not see any directories, this means you are already in the correct "pub" directory.

### My feed is not updated on Kelkoo Group

* Please ensure your file name remains the same each time your update the feed, otherwise our system will not be able to pick up the feed.

## Frequently Asked Questions

### How often should I update my feed?

To provide the best user experience, we recommend that you update your feed on regularly basis, ideally once a day or several times a day, depending on the frequency of changes in your store.

### What is the maximum file size I can upload to my Kelkoo FTP account?

* The Kelkoo Group FTP accounts are set up with a limit of 5GB.

* If your feed is larger, please speak to your Kelkoo Group account manager.

---
language: "en"
---
# Product data feed

## About feeds

A feed is a file that contains a list of products you want to advertise through KelkooGroup.

When you add your products, you'll assign attributes to each to describe them. Some, such as condition and availability, have standardized or accepted values. Others, including *id* or *title*, are left open for you to fill out however you like.

Accurately describing your products using the required and suggested attributes helps people find them, and ultimately improve the performance of your KelkooGroup campaigns.

## Setup your feed for KelkooGroup

### Option 1 - Use an existing feed

If you have already built a product data feed to use on other platforms, we can reuse it to advertise your products through KelkooGroup. We support the following feed types/formats:

* Google Shopping format (ideally as XML file)

* Feeds from feed aggregators (Beezup, Lengow, Shopping-Feed, etc.)

* Feeds from other comparison shopping engines (Billiger, Idealo, Heureka, etc.)

* Feeds from affiliate networks (Admitad/Yandex, AWIN, Belboon, DaisyCon, Partner-Ads, TradeTracker, etc.)

### Option 2 - Create a feed from scratch

#### Product data specifications

The KelkooGroup product data specification page lists all the attributes you need for you KelkooGroup shopping campaigns:

* Some attributes are required for all products

* Some are required for certain types of products (such as apparel)

* Others are recommended.

Failure to provide a *required* attribute may prevent that particular product from showing up in KelkooGroup shopping campaigns, whereas failure to provide *recommended* attributes may result in products showing up less frequently.

The product data specification also provides guidelines for submitting high-quality data to KelkooGroup. Fresh, comprehensive, and accurate product data will help attract users to your products. Some best practices to form the basis of performing shopping campaigns include:

* Provide clear and conspicuous pricing information.

* Provide the freshest availability status of your items.

* Provide complete and correct shipping information and costs.

* Show a product that is essentially identical on your landing page to the product data you submit to Google.

#### Feed formats

We currently support data feeds in these formats:  

|     Type      |                                            Advantages                                            |                               Disadvantages                                |
|---------------|--------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|
| **Text file** | * Simple to create and edit if you have a spreadsheet program * Easier to view multiple products | * Easier to make formatting mistakes                                       |
| **XML file**  | * Including multiple values for an attribute is easier                                           | * May require more tech-savviness * Difficult to see many products at once |

#### Guidelines to create text files

If you choose a text file, here are some recommendations:

* The first line of your file must be a header row, defining the structure of your file. The attribute names you use in this header row must respect the name of the attributes as shown in the KelkooGroup product data specification.

* Use field separators to separate product attributes, new lines allow our system to distinguish between products.

* You can use any type of field separator.

* Of course, the field separator should not be present within a same field (for example in the description).

* All products / lines must contain the same number of fields. If a field is has no value, it must be left blank with the field separator present.

An example of a TXT file with some of the required attributes and using ";" as field separator would look like this:

    id;title;product-url;price;brand
    MLK245;100 Pant fleece pant, men's 10/11;https://www.merchant.com/product/100-pant-fleecebukse-herre-1011-19959.html;599.00;The North Face

#### Guidelines to create XML files

If you opt for an XML file, here are some recommendations:

* Respect the names of the XML tags as shown in the KelkooGroup product data specification.

* The XML file should be validated using a tool like [The W3C Markup Validation Service](http://validator.w3.org/) before sending it to us.

* If you choose to not validate your XML file, it is preferable to insert the contents of the text fields in a CDATA section. CDATA sections are not analysed so characters such as \&, \>, or \< won't make your XML file invalid.

* Please note that an invalid XML file can not be operated by KelkooGroup system and your products will not be updated.

An example of a XML file using some of the required attributes would look like this:
XML

    <products>
        <product>
            <id>MLK245</id>
            <title>100 Pant fleece pant, men's 10/11</title>
            <product-url>https://www.merchant.com/product/100-pant-fleecebukse-herre-1011-19959.html</product-url>
            <price>599.00</price>
            <brand>The North Face</brand>
            <description><![CDATA[The North Face TKA 100 Pant fleece pant is designed for cold conditions and fits very well under the shell clothing.]]></description>
            <image-url>https://www.merchant.com/uploads/pictures/21691-128.jpg</image-url>
            <ean>4856349257328</ean>
            <merchant-category>Clothing - Men - Pants - Outdoor Pants</merchant-category>
            <availability>1</availability>
            <delivery-cost>9.00</delivery-cost>
            <delivery-time>1-3 days</delivery-time>
            <mpn>AJGW</mpn>           
        </product>
    </products>

## Send your feed to KelkooGroup

### Feed retrieval methods

We currently support the following ways to retrieve your feed:

* **Retrieve via HTTP / HTTPS**

  * With this option, you host your feed file on your server(s), and KelkooGroup will fetch them on regular basis (see the timing for each country in the next section of this page).

  * You must provide a URL where KelkooGroup can find your complete product data feed, eg. `https://www.merchant.com/feeds/kelkoogroup_feed.xml` if XML or `https://www.merchant.com/feeds/kelkoogroup_feed.txt` if TXT.

  * If the URL is password protected, you must provide username and password for us to access it.

  * If you apply IP restrictions, you must allow KelkooGroup public IP addresses access (provided upon request).

  * The name of your feed file must remain the same over time (so that the URL remains constant over time).

  * In case of large volumes of data generated "on the fly", make sure your web server is configured with proper timeout to allow the complete download of the feed file.

* **Retrieve from FTP**

  * With this option, you host your feed file(s) on your FTP server, and KelkooGroup will fetch them on regular basis (see the timing for each country in the next section of this page)

  * You must provide to KelkooGroup:

    * The address / URL of your FTP server

    * The name(s) of the feed file(s) we should use

    * Login (username and password)

* **Upload to KelkooGroup FTP**

  * This option is set up on request and will allow you to host your feed file(s) on a KelkooGroup FTP server.

  * We will communicate your login details once your KelkooGroup FTP server account has been created.

  * Pls refer to How to upload your feed to KelkooGroup FTP server for more details.

### Schedule your feed updates to optimise its freshness on KelkooGroup campaigns

KelkooGroup fetches feeds on regular basis to refresh your products online. Please ensure your feed files are available at the right time(s) for your country.

Timings below are subject to change without prior notice. Please verify the update times with your KelkooGroup contact.  

|     **Country**      |                                                                                                    **Fetching offers**                                                                                                    |
|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Austria              | * 00:00 (CET) * 08:00 (CET) * 12:00 (CET) * 15:00 (CET)                                                                                                                                                                   |
| Belgium FR           | * 08:00 (CET) * 15:00 (CET) * 18:00 (CET)                                                                                                                                                                                 |
| Belgium NL           | * 07:30 (CET) * 11:30 (CET) * 15:30 (CET) * 23:30 (CET)                                                                                                                                                                   |
| Brazil               | * 10:00 (CET) * 15:00 (CET) * 19:00 (CET) * 23:00 (CET)                                                                                                                                                                   |
| Czech Rep.           | * 00:00 (CET) * 08:00 (CET) * 12:00 (CET) * 15:00 (CET)                                                                                                                                                                   |
| Denmark              | * 07:30 (CET) * 11:30 (CET) * 15:30 (CET) * 23:30 (CET)                                                                                                                                                                   |
| Finland              | * 07:30 (CET) * 11:30 (CET) * 15:30 (CET) * 23:30 (CET)                                                                                                                                                                   |
| France               | * 05:00 (CET) (+Cars) * 06:00 (CET) * 07:00 (CET) * 08:00 (CET) * 09:00 (CET) * 10:00 (CET) (+Cultural) * 11:00 (CET) * 12:00 (+Cars) * 15:00 (CET) * 16:00 (CET) * 17:00 (CET) * 18:00 (CET) * 19:00 (CET) * 20:00 (CET) |
| Germany              | * 06:00 (CET) * 08:00 (CET) * 10:00 (CET) * 12:00 (CET) * 14:00 (CET) * 16:00 (CET) * 18:00 (CET) * 20:00 (CET)                                                                                                           |
| Greece               | * 00:00 (CET) * 08:00 (CET) * 12:00 (CET) * 15:00 (CET)                                                                                                                                                                   |
| Hungary              | * 00:00 (CET) * 08:00 (CET) * 12:00 (CET) * 15:00 (CET)                                                                                                                                                                   |
| Ireland              | * 05:30 (GMT) * 11:30 (GMT) * 15:30 (GMT) * 20:30 (GMT)                                                                                                                                                                   |
| Italia               | * 00:10 (CET) * 08:10 (CET) * 12:10 (CET) * 16:10 (CET)                                                                                                                                                                   |
| Netherlands          | * 07:30 (CET) * 11:30 (CET) * 15:30 (CET) * 23:30 (CET)                                                                                                                                                                   |
| Norway               | * 07:30 (CET) * 11:30 (CET) * 15:30 (CET) * 23:30 (CET)                                                                                                                                                                   |
| Poland               | * 00:00 (CET) * 08:00 (CET) * 12:00 (CET) * 15:00 (CET)                                                                                                                                                                   |
| Portugal             | * 00:10 (CET) * 08:10 (CET) * 12:10 (CET) * 16:10 (CET)                                                                                                                                                                   |
| Romania              | * 00:00 (CET) * 08:00 (CET) * 12:00 (CET) * 15:00 (CET)                                                                                                                                                                   |
| Russia               | * 05:30 (CET) * 11:30 (CET) * 17:30 (CET) * 23:30 (CET)                                                                                                                                                                   |
| Slovakia             | * 00:00 (CET) * 08:00 (CET) * 12:00 (CET) * 15:00 (CET)                                                                                                                                                                   |
| Spain                | * 00:10 (CET) * 08:10 (CET) * 12:10 (CET) * 16:10 (CET)                                                                                                                                                                   |
| Sweden               | * 07:30 (CET) * 11:30 (CET) * 15:30 (CET) * 23:30 (CET)                                                                                                                                                                   |
| Switzerland          | * 00:00 (CET) * 08:00 (CET) * 12:00 (CET) * 15:00 (CET)                                                                                                                                                                   |
| United Arab Emirates | * 07:00 (UTC) * 11:00 (UTC) * 14:00 (UTC) * 23:00 (UTC)                                                                                                                                                                   |
| United Kingdom       | * 06:30 (GMT) * 11:30 (GMT) * 15:30 (GMT) * 20:30 (GMT)                                                                                                                                                                   |

---
language: "en"
---
# Product data feed - FAQ

**I want to upload my Product data feed to Kelkoo Group's FTP server. Where can I access the account information?**

Contact your account manager or technical contact to request a FTP account.

**How do I upload my Product data feed to the Kelkoo Group FTP server?**

We have created [a guide for those who want to upload a file to our FTP server](https://docs.kelkoogroup.com/for-advertisers/product-data/how-to-upload-your-feed-to-kelkoo-group-ftp-server.md).

**My Product data feed contains HTML code. Is this a problem?**

We will remove any HTML code, so you can choose to leave it there, or clear the file for tidiness.

**I can't find my products on Kelkoo Group. Where are they?**

* On the Kelkoo website, fill the search bar with the title of one of the offers that is available in your product data feed.

* Click the "I" icon on top right of your offer.

* On the offer detailed view click on the link "See all offers from \[your store name\]

* All you offers will be listed

* On the left menu you'll see the list of categories where your offers are liste

* If you are a new merchant on Kelkoo, it may take a few days before all the products are categorised correctly and are available through the product search.

**Which IPs are used by Kelkoo Group?**

* Local test IP:

  * 95.211.116.116

  * 193.104.219.116

* Production environment (online IPs):

  * 54.154.68.158

  * 95.211.116.(112-115)

For live searches (flight, hotels, car hire) you can also expect requests from 193.104.219.(42-51)

**I've updated my Product data feed. How long does it take before the changes are online?**

To know when Kelkoo sites are updated please check [the following page](https://docs.kelkoogroup.com/for-advertisers/product-data/product-data-feed.md).

**My products are online but there are errors in the display/categorisation. What can I do?**

* Please check your feed to ensure that there aren't any errors.

* If the error shown on Kelkoo website isn't caused by an error in the feed please contact us.

**Why aren't my images displayed on Kelkoo Group?**

When you add new images in your product feed (or if this is your first upload) please allow 72 hours for the images to be shown online on Kelkoo Group.If your products have been online for more than three days, and the images are still not online please contact us.

**The delivery information for my products are wrong. How can I update this?**

If the delivery information in your feed is not what is being displayed on Kelkoo Group then please contact us.

**What types of product codes are recognised by your systems?**

We accept the following range of product codes:

* UPC-E

* UPC-A / GTIN-12

* EAN-8 / UCC-8 / GTIN-8

* EAN-13 / UCC-13 / GTIN-13

* EAN-14 / UCC-14 / GTIN-14

* ISBN-13

**I've removed my Product Feed from its location / I've emptied my Product Feed. Why my products are still online on Kelkoo Group?**

To remove all the products from Kelkoo Group, you need to contact your Account Manager. For safety reasons, when the product feed is unavailable or the content is empty, we're used to keeping the last available list of products properly downloaded online.

[Next Page](https://docs.kelkoogroup.com/llms-full.txt/1)
