Comme vous le savez, Google Analytics 3 (GA3) ferme définitivement ses portes le 1er juillet 2024. Ainsi, il ne vous reste plus beaucoup de temps pour agir. Pour vous aider, Optimize matter a décidé de mettre son code en open source - disponible sur notre GitHub - et même d’aller encore plus loin. Dans cet article, nous vous expliquons étape par étape comment l’utiliser pour sauver vos données avant qu’il ne soit trop tard. En premier lieu, voyons pourquoi sauvegarder ces données est indispensable.

Pourquoi sauvegarder les données de GA3 ?

Avec la transition progressive de GA3 vers GA4, il est crucial de sauvegarder vos données historiques. Cette transition, avantageuse en termes de nouvelles fonctionnalités et d'améliorations, peut entraîner des perturbations et la perte de données si elles ne sont pas correctement sauvegardées. 

Continuité des analyses  : les données historiques sont essentielles pour analyser les tendances à long terme. Par exemple, elles permettent de comparer les performances de différentes périodes, d’identifier les cycles saisonniers et de se rendre compte de l’évolution de vos métriques clés au fil du temps. Sans ces données, il devient difficile de réaliser des analyses approfondies et de comprendre les performances historiques de votre site web ou de vos campagnes marketing.

Références futures : les données historiques servent de référence pour les audits et les évaluations futures. Elles permettent de vérifier les performances passées et de justifier les décisions stratégiques. En conservant ces informations, vous pouvez facilement accéder aux rapports et aux insights passés pour appuyer vos futures stratégies marketing et commerciales.

Discontinuité des données : GA4 utilise un modèle de données différent de celui de GA3, ce qui peut entraîner des différences dans la manière dont les données sont collectées et interprétées. En sauvegardant vos données GA3, vous évitez toute perte d'informations essentielles pendant cette transition. Cela assure l’accès illimité aux anciennes métriques et dimensions spécifiques à GA3.

Adaptation : La sauvegarde des données permet une transition en douceur vers GA4. Vous pouvez comparer les données des deux plateformes et vous adapter progressivement aux nouvelles méthodes de suivi et d'analyse proposées par GA4. Cela vous donne également le temps de former votre équipe aux nouvelles fonctionnalités de GA4 sans perdre l'accès aux données historiques nécessaires pour des analyses comparatives.

Prévention des pertes : Les sauvegardes régulières protègent vos données contre les erreurs humaines, les bugs logiciels et les pannes matérielles. En ayant une copie de sauvegarde, vous pouvez rapidement restaurer vos données en cas de perte accidentelle ou de corruption.

Conformité : La sauvegarde des données peut être nécessaire pour se conformer aux réglementations légales et aux politiques internes de l'entreprise concernant la conservation des données. En conservant vos données GA3, vous vous assurez de respecter les exigences légales en matière de protection des données et de conservation des informations pour des audits ou des obligations de reporting.

En conclusion, la sauvegarde des données GA3 est une étape cruciale pour assurer la continuité et la sécurité de vos analyses web. Elle vous permet de préserver les données historiques, de faciliter la transition vers GA4 et de garantir la sécurité et la conformité de vos informations.

Comment sauvegarder vos données GA3 ?

Pour commencer, connectez-vous sur Google Cloud Platform (GCP) et créez un projet. Ici, nous l’avons appelé “backup-ga3” pour l’exemple.

Capture d'écran Optimize matter

 

Dans le menu burger, choisissez “IAM and admin” puis “IAM”

Capture d'écran Optimize matter

Cliquez ensuite sur “Grant access” 

Une fenêtre va s'ouvrir sur la droite, en principals mettez l’adresse mail du service account et en rôle “BigQuery Data Editor” puis sauvegardez.

Capture d'écran Optimize matter

En parallèle, ajoutez le service account sur Google Analytics 3 pour qu’il puisse récupérer les données des vues depuis l’API. Pour cela, un simple rôle de viewer suffit. Pour ne pas le faire sur chaque vue, faites le au niveau du compte et ajoutez l’adresse mail du service account (exemple : backup-ga3@appspot.gserviceaccount.com).

Capture d'écran Optimize matter

Il faut ensuite préparer l’export. Le script de la backup a été réalisé de façon à pouvoir exporter n'importe quelles dimensions et metrics souhaités à condition qu'ils soient compatibles entre eux. Pour vérifier la compatibilité des metrics et dimensions entre eux, l'utilisation de Google Analytics Dev Tools est nécessaire.

Sélectionnez simplement les dimensions/metrics souhaités et ceux incompatibles deviendront gris. N’oubliez pas que l’API est limitée à 9 dimensions et 10 metrics.

Capture d'écran Optimize matter

Il faudra ensuite renseigner un body au script de la backup. Celui-ci sera récupéré par le script pour connaître par exemple la vue à sauvegarder, le compte, le projet GCP, etc.

Il contient aussi une liste de dimensions et metrics, ce sont justement les dimensions et metrics de votre choix.

Voici un exemple de body : 


    {
    "viewId": "YOUR VIEW ID",
    "projectId": "YOUR GCP PROJECT ID",
    "datasetId": "YOUR DATASET ID",
    "tableId": "YOUR TABLE ID",
    "accountId": "YOUR GA ACCOUNT ID",
    "webPropertyID": "YOUR GA WEBPROPERTY ID",
    "startDate":"2018-01-01",
    "dimensions": [
    {"dimension": "ga:date","column": "date"},
    {"dimension": "ga:sourceMedium","column": "source_medium"},
    {"dimension": "ga:deviceCategory","column": "device_category"},
    {"dimension": "ga:eventCategory","column": "event_category"},
    {"dimension": "ga:eventAction","column": "event_action"}, 
    {"dimension": "ga:eventLabel","column": "event_label"}    
    ],
    "metrics": [
    {"metric": "ga:totalEvents","column": "total_events"},
    {"metric": "ga:uniqueEvents","column": "unique_events"},
    {"metric": "ga:eventValue","column": "event_value"},
    {"metric": "ga:avgEventValue","column": "avg_event_value 
    ],
    }

La clé column du fichier sert à changer le nom de la dimension une fois dans la table BigQuery. Ainsi, “ga:sourceMedium” deviendra “source_medium” dans la table. Deux points syntaxe concernant le nom de la colonne sont à retenir : 

  • Lettre en majuscules à chaque mot
  • “_” comme séparateur (sauf Pageview)

Certains paramètres du body sont optionnels : 

clusteringFields : liste des champs pour clusteriser la table BQ ('Aggregation','view_id' et 'Web_Property_Name' par défaut)

startDate : string (YYYY-MM-DD, 2005-01-01 par défaut)

endDate : string (YYYY-MM-DD, "today" par défaut)


Des tables pré-faites ont été réalisées : voici le body pour chacune d’entre elles (n'oubliez pas de changer les valeurs de viewId,projectId,datasetId,tableId,accountId et webPropertyID) : 

Product : 


    {
    "viewId": "YOUR VIEW ID",
    "projectId": "YOUR GCP PROJECT ID",
    "datasetId": "YOUR DATASET ID",
    "tableId": "YOUR TABLE ID",
    "accountId": "YOUR GA ACCOUNT ID",
    "webPropertyID": "YOUR GA WEBPROPERTY ID",
    "startDate":"2018-01-01",
    "dimensions": [
        {"dimension": "ga:date","column": "date"},
        {"dimension": "ga:productSku","column": "product_sku"},
        {"dimension": "ga:productName","column": "product_name"},
        {"dimension": "ga:productListName","column": "product_list_name"},
        {"dimension": "ga:productCategoryHierarchy","column": "product_category_hierarchy"}
    ],
    "metrics": [
        {"metric": "ga:itemRevenue","column": "item_revenue"},
        {"metric": "ga:itemQuantity","column": "item_quantity"},
        {"metric": "ga:productListViews","column": "product_list_views"},
        {"metric": "ga:productListClicks","column": "product_list_clicks"},
        {"metric": "ga:productDetailViews","column": "product_detail_views"},
        {"metric": "ga:productAddsToCart","column": "product_adds_to_cart"},
        {"metric": "ga:productCheckouts","column": "product_checkouts"},
        {"metric": "ga:uniquePurchases","column": "unique_purchases"}
    ]
}

Transaction :


    {
    "viewId": "YOUR VIEW ID",
    "projectId": "YOUR GCP PROJECT ID",
    "datasetId": "YOUR DATASET ID",
    "tableId": "YOUR TABLE ID",
    "accountId": "YOUR GA ACCOUNT ID",
    "webPropertyID": "YOUR GA WEBPROPERTY ID",
    "startDate":"2018-01-01",
    "dimensions": [
        {"dimension": "ga:date","column": "date"},
        {"dimension": "ga:transactionId","column": "transaction_id"},
        {"dimension": "ga:orderCouponCode","column": "order_coupon_code"},
        {"dimension": "ga:checkoutOptions","column": "checkout_options"},
        {"dimension": "ga:affiliation","column": "affiliation"},
        {"dimension": "ga:sessionsToTransaction","column": "sessions_to_transaction"},
        {"dimension": "ga:daysToTransaction","column": "days_to_transaction"}
    ],
    "metrics": [
        {"metric": "ga:transactions","column": "transactions"},
        {"metric": "ga:transactionsPerSession","column": "transactions_per_session"},
        {"metric": "ga:transactionRevenue","column": "transaction_revenue"},
        {"metric": "ga:revenuePerTransaction","column": "revenue_per_transaction"},
        {"metric": "ga:transactionShipping","column": "transaction_shipping"},
        {"metric": "ga:transactionTax","column": "transaction_tax"},
        {"metric": "ga:totalValue","column": "total_value"}
    ]
}

Acquisition : 


    {
    "viewId": "YOUR VIEW ID",
    "projectId": "YOUR GCP PROJECT ID",
    "datasetId": "YOUR DATASET ID",
    "tableId": "YOUR TABLE ID",
    "accountId": "YOUR GA ACCOUNT ID",
    "webPropertyID": "YOUR GA WEBPROPERTY ID",
    "startDate":"2018-01-01",
    "dimensions": [
        {"dimension": "ga:date","column": "date"},
        {"dimension": "ga:sourceMedium","column": "source_medium"},
        {"dimension": "ga:campaign","column": "campaign"},
        {"dimension": "ga:browser","column": "browser"},
        {"dimension": "ga:deviceCategory","column": "device_category"}
    ],
    "metrics": [
        {"metric": "ga:sessions","column": "sessions"},
        {"metric": "ga:users","column": "users"},
        {"metric": "ga:newUsers","column": "new_users"},
        {"metric": "ga:bounceRate","column": "bounce_rate"},
        {"metric": "ga:transactions","column": "transactions"},
        {"metric": "ga:transactionRevenue","column": "transaction_revenue"},
        {"metric": "ga:transactionsPerSession","column": "transactions_per_session"},
        {"metric": "ga:pageviews","column": "pageviews"},
        {"metric": "ga:pageviewsPerSession","column": "pageviews_per_session"}
    ]
}

Global : 


    {
    "viewId": "YOUR VIEW ID",
    "projectId": "YOUR GCP PROJECT ID",
    "datasetId": "YOUR DATASET ID",
    "tableId": "YOUR TABLE ID",
    "accountId": "YOUR GA ACCOUNT ID",
    "webPropertyID": "YOUR GA WEBPROPERTY ID",
    "startDate":"2018-01-01",
    "dimensions": [
        {"dimension": "ga:date","column": "date"}
    ],
    "metrics": [
        {"metric": "ga:users","column": "users"},
        {"metric": "ga:sessions","column": "sessions"},
        {"metric": "ga:pageviews","column": "pageviews"},
        {"metric": "ga:transactions","column": "transactions"},
        {"metric": "ga:transactionRevenue","column": "transaction_revenue"},
        {"metric": "ga:newUsers","column": "new_users"},
        {"metric": "ga:bounceRate","column": "bounce_rate"}
    ]

}

Maintenant que le body est rempli et que le service account est configuré, il ne reste plus qu'à lancer le script. Là encore plusieurs méthodes sont possibles mais veillez à bien vous organiser.

Première méthode, la plus simple

Cette méthode consiste à lancer le script depuis la cloud function GCP.

C’est assez facile à faire, il suffit d’aller dans GCP puis de sélectionner la cloud function GA3-Backup dans la partie cloud function. Ensuite, allez dans testing, sur la partie de droite collez votre body puis cliquez sur test in cloud shell. Il suffit d’appuyer sur entrée pour exécuter le script. Vous pouvez voir dans les logs les prints du script.

Deuxième méthode, la meilleure

Nous utilisons une autre méthode, plus longue mais aussi plus propre, pour effectuer ce backup. Celle-ci consiste à lancer les calls à la cloud function en local en renseignant un fichier JSON comme body. Le script s'exécutera tout de même dans le cloud. 

Pour cette méthode il faut avoir VSCode ainsi que l’extension google cloud code d’installée.

Capture d'écran Optimize matter

Ensuite, il faut créer un dossier par client dans un dossier parent que vous pouvez par exemple appeler “backup”. Chaque dossier client contient un sous-dossier par vue et chaque sous-dossier contient les bodys de chaque table : 

Capture d'écran Optimize matter

Une fois cela fait, ouvrez avec VSCode le dossier parent “backup” 

Capture d'écran Optimize matter

Ainsi, il est possible de voir chaque vue et chaque table qui a été sauvegardée ou non. Vous pouvez faire une une annotation avec des couleurs :

🟩 : Table sauvegardée

🟧 : Script en cours d'exécution

🟥 : Table à lancer

Il faut ensuite ouvrir un terminal (CTRL+%) et Cloud Code à l’aide de la barre latérale.

Si ce n’est pas encore fait, connectez-vous puis choisissez le projet (backup-ga3) et enfin trouvez la cloud function “GA3-Backup” en passant le curseur dessus.  On voit apparaître { } qui permet d'invoquer la cloud function. Il faut simplement indiquer le JSON à utiliser pour exécuter la cloud function. 

L’un des avantages avec cette méthode, c’est qu’il est possible de faire des calls en parallèle, c'est-à-dire plusieurs exécutions en même temps. Pour cela il suffit d'ouvrir un terminal et de ré-exécuter la manipulation précédente.

Si vous ne réouvrez pas le terminal, la commande se lancera, mais à la fin de celle en cours. Cela est aussi intéressant pour lancer la table event par exemple, qui demande plusieurs exécutions pour être complétée. Il faut vérifier dans les logs GCP en filtrant sur le view_id et la table sauvegardée pour voir si elle s'est finie correctement ou si elle a time-out.

Nous avons vu ensemble pourquoi et surtout comment sauvegarder ses données GA3, étape par étape. Nos experts restent à votre disposition en cas de problème dans cette manipulation ou pour tout autre besoin. N’hésitez pas à nous contacter juste ici !