Référencement payant

Conversions hors ligne Google Ads : import par API en Python (Data Manager API et Google Ads API)

Pourquoi remonter les ventes de votre CRM dans Google Ads, puis comment le faire. Depuis le 15 juin 2026, les nouvelles intégrations passent par la Data Manager API : prérequis, capture du GCLID, code Python à jour, délais de 90 et 63 jours, erreurs courantes.

Google Ads

L’essentiel en 30 secondes

  • Importer les ventes conclues dans votre CRM permet aux enchères automatiques de viser de vrais clients, pas de simples formulaires remplis.
  • Depuis le 15 juin 2026, les nouvelles intégrations doivent utiliser la Data Manager API ; UploadClickConversions reste réservé aux intégrations existantes.
  • Capturez GCLID, gbraid et wbraid dans votre CRM et ajoutez l'e-mail haché pour le suivi avancé des conversions.
  • Délais : 90 jours après le clic (63 jours avec données du suivi avancé), import au moins quotidien.

Importer vos conversions hors ligne, c'est dire à Google Ads quels clics ont vraiment abouti à un contrat, un rendez-vous ou une vente conclue plus tard, hors de votre site. Les enchères automatiques optimisent alors sur vos vrais clients plutôt que sur de simples formulaires remplis. Depuis le 15 juin 2026, la voie a changé : les nouvelles intégrations doivent utiliser la Data Manager API ; la méthode UploadClickConversions de la Google Ads API ne reste ouverte qu'aux intégrations qui l'utilisaient déjà entre le 17 décembre 2025 et le 15 juin 202612.

Pourquoi remonter les ventes de votre CRM dans Google Ads ?

Sans cette remontée, Google Ads ne voit que ce qui se passe sur votre site : un formulaire envoyé, un appel. Il ne sait pas si ce contact est devenu client, ni pour quel montant. Or les enchères automatiques (voir notre guide Smart Bidding) apprennent à partir des conversions que vous leur indiquez : si la seule conversion déclarée est « formulaire rempli », elles cherchent davantage de formulaires, pas forcément davantage de clients. En renvoyant la vente conclue, telle que votre CRM l'a enregistrée, vous leur donnez la vraie cible2.

Cela compte surtout quand la vente se décide loin du site : devis, rendez-vous, appel téléphonique, signature en agence2. Dans ces cas, le clic sur l'annonce et la vente sont séparés de plusieurs jours ou semaines, et seul votre CRM relie les deux.

Ce que cela demande à l'entreprise, avant toute ligne de code :

  • Un CRM, ou à défaut un endroit unique où chaque prospect garde l'identifiant du clic qui l'a amené : Google demande d'enregistrer cet identifiant avec les informations recueillies sur la personne2. Si vous hésitez sur l'outil, lisez un CRM, c'est quoi et à quoi ça sert.
  • Une discipline commerciale : les vendeurs doivent marquer la vente comme conclue dans le CRM, avec le montant et la date. Une donnée absente du CRM ne peut pas remonter.
  • Le consentement des visiteurs : l'envoi de données de contact et de signaux de consentement suppose que votre bannière cookies les recueille correctement.
  • Une personne qui s'occupe de l'envoi : développeur interne ou prestataire. Pour qui n'a encore aucun import, Google recommande de partir du suivi avancé des conversions pour les prospects, qui se configure avec Google Tag Manager, la balise Google ou Data Manager2. Le reste de l'article, technique, s'adresse à cette personne.

Si vous voulez qu'on relie votre CRM à vos campagnes, voyez notre service CRM et messagerie et notre suivi de campagnes Google Ads.

Quelle API utiliser en 2026 ?

CritèreData Manager APIGoogle Ads API (ConversionUploadService)
Nouvelle intégrationOui, c'est la voie imposéeNon : erreur CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE1
Developer tokenNon requisPlus requis non plus depuis le 9 septembre 20266
Corrections de conversionsMême méthode : un nouvel envoi avec le même transaction_id vaut ajustementService séparé (ConversionAdjustmentUploadService)
Gestion des erreursÉchec de toute la requête dès qu'une erreur est détectéeÉchec partiel possible
Chiffrement des données utilisateurPris en chargeNon

Source : guide de migration de Google3. Autre différence importante : dans la Data Manager API, le compte de destination doit être celui qui possède l'action de conversion, pas un compte parent ou enfant3.

Que faut-il préparer avant d'envoyer des conversions ?

  1. Une action de conversion de type « Importation à partir des clics » (UPLOAD_CLICKS), dans le compte Google Ads qui en sera propriétaire4. Notez son ID.
  2. Le marquage automatique activé dans les paramètres du compte, pour que le GCLID soit ajouté aux URL de vos annonces.
  3. Le suivi avancé des conversions pour les prospects, recommandé par Google : il complète le GCLID par des données saisies dans le formulaire (e-mail, téléphone), hachées en SHA-256 avant envoi4. Il faut accepter les conditions relatives aux données client dans Google Ads.
  4. Le consentement : en Europe, transmettez les signaux de consentement (ad_user_data, ad_personalization) recueillis par votre bannière cookies.
  5. Un projet Google Cloud avec la Data Manager API activée et des identifiants autorisés sur le compte Google Ads.

Comment capturer le GCLID sur votre site ?

Le GCLID est ajouté à l'URL de destination quand quelqu'un clique sur votre annonce. Selon l'appareil, Google peut transmettre à la place gbraid ou wbraid (parcours impliquant une application iOS)4. Le script suivant les conserve 90 jours et les ajoute à chaque formulaire, pour qu'ils arrivent dans votre CRM avec le prospect :

// Capture des identifiants de clic Google et stockage 90 jours
const CLICK_IDS = ['gclid', 'gbraid', 'wbraid'];

function readCookie(name) {
  const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));
  return match ? decodeURIComponent(match[1]) : '';
}

const params = new URLSearchParams(window.location.search);
CLICK_IDS.forEach((id) => {
  const value = params.get(id);
  if (value) {
    document.cookie = `${id}=${encodeURIComponent(value)};max-age=7776000;path=/;SameSite=Lax;Secure`;
  }
});

// Ajoute les identifiants en champs cachés à chaque formulaire envoyé
document.querySelectorAll('form').forEach((form) => {
  form.addEventListener('submit', () => {
    CLICK_IDS.forEach((id) => {
      const value = readCookie(id);
      if (value && !form.querySelector(`input[name="${id}"]`)) {
        const input = document.createElement('input');
        input.type = 'hidden';
        input.name = id;
        input.value = value;
        form.appendChild(input);
      }
    });
  });
});

Ce cookie sert la mesure publicitaire : il doit être déposé uniquement après consentement, selon votre gestion des cookies.

Comment envoyer les conversions avec la Data Manager API en Python ?

Exemple fondé sur l'échantillon officiel de Google5. La bibliothèque utilitaire normalise et hache l'e-mail comme Google l'attend.

# pip install google-ads-datamanager google-ads-datamanager-util  (Python 3.10+)
from google.ads import datamanager_v1
from google.ads.datamanager_util import Formatter
from google.ads.datamanager_util.format import Encoding
from google.protobuf.timestamp_pb2 import Timestamp

formatter = Formatter()

def build_event(lead):
    event = datamanager_v1.Event()
    ts = Timestamp()
    ts.FromJsonString(lead["converted_at"])          # ex. "2026-09-29T14:30:00+02:00"
    event.event_timestamp = ts
    event.transaction_id = lead["crm_id"]            # sert à dédoublonner
    event.event_source = datamanager_v1.EventSource.WEB
    event.conversion_value = lead["amount"]
    event.currency = "EUR"
    if lead.get("gclid"):
        event.ad_identifiers = datamanager_v1.AdIdentifiers(gclid=lead["gclid"])
    if lead.get("email"):
        event.user_data = datamanager_v1.UserData(user_identifiers=[
            datamanager_v1.UserIdentifier(
                email_address=formatter.process_email_address(lead["email"], Encoding.HEX)
            )
        ])
    return event

destination = datamanager_v1.Destination()
destination.operating_account.account_type = datamanager_v1.ProductAccount.AccountType.GOOGLE_ADS
destination.operating_account.account_id = "1234567890"   # compte propriétaire de l'action de conversion
destination.product_destination_id = "ID_ACTION_CONVERSION"

request = datamanager_v1.IngestEventsRequest(
    destinations=[destination],
    events=[build_event(lead) for lead in leads],
    consent=datamanager_v1.Consent(
        ad_user_data=datamanager_v1.ConsentStatus.CONSENT_GRANTED,
        ad_personalization=datamanager_v1.ConsentStatus.CONSENT_GRANTED,
    ),
    encoding=datamanager_v1.Encoding.HEX,
    validate_only=True,   # passez à False une fois la validation réussie
)
client = datamanager_v1.IngestionServiceClient()   # identifiants par défaut de l'application (ADC)
response = client.ingest_events(request=request)
print(response)

Chaque requête accepte au maximum 2 000 événements selon la référence de la méthode7. Pour une nouvelle action de conversion, Google applique une période d'essai de 14 jours pendant laquelle les conversions envoyées apparaissent dans les rapports sans encore servir aux enchères5.

Et si votre intégration Google Ads API existante fonctionne encore ?

Si votre projet envoyait déjà des conversions avant le 15 juin 2026, UploadClickConversions reste disponible. Le code à jour avec la bibliothèque Python google-ads :

# google-ads >= 33.0.0 ; réservé aux intégrations déjà autorisées
click_conversion = client.get_type("ClickConversion")
click_conversion.gclid = "GCLID_DU_LEAD"
click_conversion.conversion_action = client.get_service(
    "ConversionActionService"
).conversion_action_path("1234567890", "ID_ACTION_CONVERSION")
click_conversion.conversion_date_time = "2026-09-29 14:30:00+02:00"
click_conversion.conversion_value = 1500.0
click_conversion.currency_code = "EUR"
click_conversion.order_id = "CRM-4521"

request = client.get_type("UploadClickConversionsRequest")
request.customer_id = "1234567890"
request.conversions.append(click_conversion)
request.partial_failure = True

response = client.get_service("ConversionUploadService").upload_click_conversions(
    request=request
)
if response.partial_failure_error:
    print(response.partial_failure_error.message)

Chaque appel accepte au maximum 2 000 conversions8. Google encourage néanmoins à migrer vers la Data Manager API3 : planifiez-le plutôt que d'attendre une coupure.

Quels délais respecter ?

  • 90 jours : une conversion importée plus de 90 jours après le dernier clic n'est pas prise en compte9.
  • 63 jours pour les conversions envoyées avec des données du suivi avancé des conversions pour les prospects9.
  • Au moins une fois par jour : c'est la fréquence d'import recommandée par Google, ou à défaut un rythme régulier10.
  • Environ 3 heures pour voir les conversions importées dans les rapports9.
  • 55 jours pour ajuster ou reformuler la valeur d'une conversion déjà enregistrée10.

Si votre cycle de vente dépasse 90 jours, importez une étape intermédiaire (rendez-vous qualifié, devis accepté) qui survient dans ce délai.

Quelles erreurs éviter ?

  • Doublons : renseignez toujours un identifiant de transaction unique (ID CRM). Dans la Data Manager API, il sert aussi à corriger une conversion déjà envoyée5.
  • Fuseau horaire : une conversion datée avant le clic est rejetée ; indiquez toujours le fuseau dans la date10.
  • Mauvais compte de destination : avec la Data Manager API, visez le compte qui possède l'action de conversion3.
  • Valeurs absentes : sans montant, les stratégies orientées valeur ne peuvent pas distinguer un petit contrat d'un gros.

Pour savoir comment ces conversions alimentent les enchères, voir notre guide des enchères automatiques Smart Bidding. Si vous voulez qu'on vérifie votre chaîne de mesure de bout en bout, notre équipe de suivi de campagnes Google Ads commence par un audit gratuit.

Sources

  1. Feature deprecations and unversioned changes (Google Ads API, Google for Developers)
  2. À propos de l'importation des conversions hors connexion (Aide Google Ads)
  3. Upgrade from the Google Ads API (Data Manager API, Google for Developers)
  4. Manage offline conversions (Google Ads API, Google for Developers)
  5. Send events : Google Ads offline conversions (Data Manager API, Google for Developers)
  6. Developer token sunset and API access management (Google for Developers)
  7. Method: events.ingest (Data Manager API reference)
  8. API limits and quotas (Google Ads API, Google for Developers)
  9. Guidelines for importing offline conversions (Aide Google Ads)
  10. Questions fréquentes sur l'importation des conversions hors connexion (Aide Google Ads)

Écrit par

CTO & Chief Digital Strategist chez AdSim, Liège

Georges est CTO et Chief Digital Strategist d’AdSim.

  • Campaign Manager Brand Controls Basics
  • Bid Manager Brand Controls Basics
  • AdWords Video Brand Controls Basics

Questions fréquentes

Vos questions sur les conversions hors ligne

Faut-il absolument un GCLID ?

Non. Avec le suivi avancé des conversions pour les prospects, une conversion qui ne contient que des données fournies par l'utilisateur (e-mail ou téléphone hachés) reste utile ; Google recommande d'envoyer toutes les données disponibles, avec le GCLID quand vous l'avez.

Les conversions hors ligne fonctionnent-elles avec Performance Max ?

Oui : une action de conversion importée peut servir d'objectif à toute campagne qui optimise sur les conversions, y compris Performance Max.

Les conversions hors ligne influencent-elles le niveau de qualité ?

Non. Le niveau de qualité est un diagnostic fondé sur le taux de clics attendu, la pertinence de l'annonce et l'expérience sur la page de destination. Les conversions importées agissent sur les enchères automatiques, pas sur ce score.

Peut-on utiliser les types de conversion « prospect » ajoutés en v24 ?

Les types GOOGLE_ANALYTICS_4_GENERATE_LEAD, QUALIFY_LEAD et CLOSE_CONVERT_LEAD concernent les conversions importées depuis Google Analytics 4, pas l'import direct depuis votre CRM, qui utilise une action de type UPLOAD_CLICKS.

Faut-il un CRM pour importer des conversions hors ligne ?

Il faut surtout garder, pour chaque prospect, l'identifiant du clic (GCLID) avec la date et le montant de la vente conclue : Google demande d'enregistrer cet identifiant avec les informations du prospect. Un CRM est l'endroit naturel pour le faire, mais c'est la liaison entre le clic et la vente qui compte, pas le logiciel.

Commentaires

Chaque commentaire est relu avant publication, en général sous 24 h ouvrées. Les liens promotionnels ne sont pas publiés.

Aucun commentaire pour l’instant. Une question sur l’article ? Posez-la ci-dessous.

Laisser un commentaire

Jamais publié. Sert à vous prévenir d’une réponse.

Votre commentaire sera publié après relecture. Un lien au plus, pas de message promotionnel.

Point de départ

On applique cette méthode à votre compte ?

L’audit gratuit part de vos données, pas d’un exemple. Vous recevez le diagnostic sous 48 h ouvrées.

« Chez AdSim, c’est un vrai expert du digital qui lit votre demande et vous répond sous 48 h ouvrées. »

Valérie Matrige, CEO & co-fondatrice

Réponse sous 48 h ouvrées · Diagnostic 100 % gratuit · Sans engagement · Zéro revente de vos données